为什么在此代码中使用Action?

sps*_*pli 12 c# multithreading action invoke

嗨,我看到以下代码:

void UpdateMessage (string message)
{
    Action action = () => txtMessage.Text = message;
    this.Invoke (action);
}
Run Code Online (Sandbox Code Playgroud)

为什么使用Action然后在这里调用动作?为什么不只是txtMessage.Text = message用来替换函数体中的代码?


更新

在评论中提供的更完整版本的代码,下面再现了语法高亮,缩进等.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
        InitializeComponent(); 
        new Thread(Work).Start(); 
    } 

    void Work() 
    { 
        Thread.Sleep(5000); 
        UpdateMessage("My Garden"); 
    } 

    void UpdateMessage(string message) { 
        Action action = () => textBox1.Text = message; 
        this.Invoke(action); 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 20

因为此代码在与UI不同的线程上运行,并且必须编组到UI线程中Invoke.

文档Control.Invoke()状态:

在拥有控件的基础窗口句柄的线程上执行指定的委托.

这是必要的,因为底层Windows框架要求窗口句柄上的操作由拥有窗口句柄的线程执行.


Ste*_*cya 12

如果从另一个线程调用UpdateMessage,则需要调用主线程以与GUI元素交互

如果您使用,txtMessage.Text = message您将获得CrossThreadOperationException