WinForm多线程编程及线程间控件赋值示例

若在线程中对TextBox控件赋值会出错,提示:

引用内容 引用内容
线程间操作无效: 从不是创建控件“textBox1”的线程访问它。

这时通过调用窗体的Invoke方法对TextBox控件进行赋值即可:

delegate void TodoInvoke(string msg);

private void Todo(string msg)
{
    textBox1.Text = msg;
}

private void btn1_Click(object sender, EventArgs e)
{
    Thread thread = new Thread(() =>
    {
        this.Invoke(new TodoInvoke(Todo), "mzwu.com");
    });
    thread.Start();
}

.NET Framework 3.5+无需单独声明委托,可用自带的委托Action:

private void btn1_Click(object sender, EventArgs e)
{
    Thread thread = new Thread(() =>
    {
        this.Invoke(new Action<string>(delegate (string msg) { textBox1.Text = msg; }), "mzwu.com");
    });
    thread.Start();
}


评论: 0 | 引用: 0 | 查看次数: 3408
发表评论
登录后再发表评论!