在线程程序中什么时候使用Invoke?

In threading program when do you use 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"); }));

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

关于你的最后一个问题,我能想到的唯一原因是当你想阻塞你的 GUI 线程,直到用户单击消息框。 不需要

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

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

否则你会得到如下异常:

Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on.

在你的例子中,显然没有必要使用 Invoke