【发布时间】:2012-01-19 10:16:46
【问题描述】:
我使用线程在机器上执行某些进程。最终,进度会在另一个线程中报告。为了使用进程状态更新 GUI,我使用了这样的委托:
public delegate void UpdateProgressDelegate(string description, int scriptnumber);
public void UpdateProgress(string description, int scriptnumber) {
if (treeView.InvokeRequired) {
treeView.Invoke(new UpdateProgressDelegate(UpdateProgress), description, scriptnumber);
return;
}
// Update the treeview
}
并调用这个委托我使用:
form.UpdateProgress("Ready", 3);
调用 Invoke 时,我收到 TargetParameterCountException: Parameter count mismatch。 我想我可以通过将字符串和 int 参数放在一个对象中来解决这个问题,如下所示:
public delegate void UpdateProgressDelegate(object[] updateinfo);
public void UpdateProgress(object[] updateinfo) {
string description = (string) updateinfo[0];
int scriptnumber = (int) updateinfo[1];
if (treeView.InvokeRequired) {
treeView.Invoke(new UpdateProgressDelegate(UpdateProgress), new object[] { description, scriptnumber });
return;
}
// Update the treeview
}
我用它来称呼它:
form.UpdateProgress(new object[] {"Ready", 3});
但这也不起作用。我不断收到相同的 TargetParameterCountException。有什么想法可以解决这个问题吗?提前致谢!
【问题讨论】:
-
AddScript 方法是如何声明的?还是您只是在上面的代码中将 UpdateProgress 与 AddScript 混淆了?
-
@ThomasLevesque 哎呀,我确实把他们弄糊涂了,AddScript 是一个完全不同的函数!我会更新我的帖子,问题和异常仍然相同。
-
@Tigran scriptnumber 是一个整数,我会更新我的帖子。
标签: c# delegates invoke multithreading