在线程程序中何时使用Invoke?

时间:2015-05-04 04:28:19

标签: c# multithreading invoke

示例代码:

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"); }));

2 个答案:

答案 0 :(得分:4)

当您需要在UI线程上执行操作时,您将使用this.Invoke

例如,如果您要更新UI元素,则需要在主UI线程上执行。

否则你会得到一个例外:

  

跨线程操作无效:从其他线程访问控制   而不是它创建的线程。

在您的示例中,显然不需要使用Invoke

答案 1 :(得分:3)

当您需要在GUI线程上运行代码时,可以使用Invoke。不多也不少。

关于你的上一个问题,我能想到的唯一原因就是当你想要阻止你的GUI线程,直到用户点击消息框。没有需要