示例代码:
private void button1_Click(object sender, EventArgs e)
{
Thread r= new Thread(new ThreadStart(DoWork));
r.Start();
}
private void DoWork()
{
MessageBox.Show("test");
Thread.Sleep(2000);
}
开发人员何时会将MessageBox
代码替换为:
this.Invoke(new Action(() => { MessageBox.Show(this, "test"); }));
答案 0 :(得分:4)
当您需要在UI线程上执行操作时,您将使用this.Invoke
。
例如,如果您要更新UI元素,则需要在主UI线程上执行。
否则你会得到一个例外:
跨线程操作无效:从其他线程访问控制 而不是它创建的线程。
在您的示例中,显然不需要使用Invoke
答案 1 :(得分:3)
当您需要在GUI线程上运行代码时,可以使用Invoke
。不多也不少。
关于你的上一个问题,我能想到的唯一原因就是当你想要阻止你的GUI线程,直到用户点击消息框。没有需要。