使用 C# 2.0 和 MethodInvoker 委托,我有一个 GUI 应用程序从 GUI 线程或工作线程接收一些事件。
我使用以下模式来处理表单中的事件:
private void SomeEventHandler(object sender, EventArgs e)
{
MethodInvoker method = delegate
{
uiSomeTextBox.Text = "some text";
};
if (InvokeRequired)
BeginInvoke(method);
else
method.Invoke();
}
通过使用这种模式,我不会重复实际的 UI 代码,但我不确定这种方法是否好。
特别是,该行
method.Invoke()
它是否使用另一个线程来调用,或者是否在某种程度上转换为直接调用 GUI 线程上的方法?
The method.Invoke()
call 在当前执行线程上执行委托。使用BeginInvoke(method)
确保在 GUI 线程上调用委托。
当可以从 GUI 线程和其他线程调用相同的方法时,这是避免代码重复的正确方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)