我正在使用线程在我的程序的UI中运行长操作,以便它不锁定。但是,在这些任务中,我需要更新控件,这不可能来自创建它们的线程。建议使用control.BeginInvoke(Delegate)来执行你想要的方法。C#Control.Invoke方法组
但是,要做到这一点,你必须声明一个委托类型,然后才可以调用它们。
因此,它是这样的:如果我想执行方法无效更新(),我必须去:
delegate void CallbackVoid();
void Update() {...}
...(in task code)...
this.BeginInvoke(new CallbackVoid(Update));
这是相当烦人对于每个单独的方法做出来那里。我不能只是以某种方式做到这一点自然,如:
void Update() {...}
this.BeginInvoke(Update);
与control.Invoke(新的EventHandler(代表 {/ *更新控制在这里* /})); ?哪个更好? – Arie 2013-04-05 13:24:24
@Arie两者都是正确的,但不是其他。 MSDN表示:“委托可以是EventHandler的一个实例,在这种情况下,sender参数将包含此控件,而Event参数将包含EventArgs.Empty。委托也可以是MethodInvoker的实例或任何其他代理一个void参数列表,对EventHandler或MethodInvoker委托的调用将比对另一个委托类型的调用快得多“ – Alex 2013-04-05 13:28:42
@voo:实际上,这个*对于Windows窗体不是正确的,这就是问题的症结所在... – 2013-04-05 13:41:42