【发布时间】:2018-03-06 17:35:11
【问题描述】:
我用 c# 编写了以下代码,经过多次尝试后,我仍然在注释行中遇到同样的错误
错误消息:“需要方法名”
所以请您告诉我为我的 LoadSpeceficSontrol 函数发送“tmp”变量的适当方式。 提前感谢任何帮助。
private void AddBox()
{
Thread thread= new Thread(() => LoadControls());
thread.Start();
}
delegate void LoadControlsCallback();
private void LoadControls()
{
int Nu = int.Parse(PageNumber.Text);
for (int i = (Nu - 1) * 100; i < Nu * 200 && i < MoviesList.Count; i++)
{
MovieControl tmp = new MovieControl(MoviesList[i]);
if (tmp.InvokeRequired || MoviesFlowPanel.InvokeRequired)
{
LoadControlsCallback d = new LoadControlsCallback(LoadSpeceficControl, new object[] {tmp}); // error here
this.Invoke(d);
}
else
MoviesFlowPanel.Controls.Add(tmp);
}
}
private void LoadSpeceficControl(MovieControl tmp)
{
MoviesFlowPanel.Controls.Add(tmp);
}
代码版本 2.0
private void AddBox()
{
Thread thread= new Thread(() => LoadControls());
thread.Start();
}
private void LoadControls()
{
int Nu = int.Parse(PageNumber.Text);
for (int i = (Nu - 1) * 100; i < Nu * 200 && i < MoviesList.Count; i++)
{
MovieControl tmp = new MovieControl(MoviesList[i]);
if (tmp.InvokeRequired || MoviesFlowPanel.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate { MoviesFlowPanel.Controls.Add(tmp); });
}
else
MoviesFlowPanel.Controls.Add(tmp);
tmp = null;
}
}
【问题讨论】:
-
有人可以帮我吗?
-
this.Invoke(d);是类的调用方法部分 -
@RahulAgarwal 这有点神秘,你有什么建议吗?如何解决这个问题
-
让我看看..
-
使用
asunc/await和Task.Run代替原始线程并尝试用Invoke编组对UI 线程的调用。
标签: c# multithreading c#-4.0 parameters thread-safety