如果直接在子线程中对UI控件操作,会提示如下的错误:
System.InvalidOperationException,Message=线程间操作无效: 从不是创建控件“textBox1”的线程访问它。
直接在窗体构造方法中加上这一句:
Control.CheckForIllegalCrossThreadCalls = false;
然后运行程序就不会报错了
全部代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Console.WriteLine("UI初始化线程Id:" + Thread.CurrentThread.ManagedThreadId);
Control.CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
Task.Run(() =>
{
Console.WriteLine("Task子线程Id:" + Thread.CurrentThread.ManagedThreadId);
this.textBox1.Text = "直接更新";
});
}
}
运行结果: