现象
    
    有时候,我们需要加载一些比较耗时的操作通常会在线程中加载,而在线程中涉及到UI控件,如下面的写法,就会报错:
   
线程间操作无效: 从不是创建控件“textBox1”的线程访问它。
Thread td = new Thread(() =>
{
    textBox1.Text = "123";
});
td.Start();
    解决方法
    
    1.不捕获对错误线程的调用
   
 public FrmTest()
 {
     InitializeComponent();
 
     CheckForIllegalCrossThreadCalls = false;
 }
    这种属于非线程安全方式,一般不适用这种
    
    2.线程安全方式:Invoke
    
    
     (可行)
    
   
private void SetText(string text)
{
    if (textBox1.InvokeRequired)
    {
        Action<string> action = new Action<string>(SetText);
        Invoke(action, new object[] { text });
    }
    else
    {
        textBox1.Text = text;
    }
}
Thread td = new Thread(() =>
{
    SetText("123");
});
td.Start();
3.线程安全方式:BackgroundWorker
BackgroundWorker backgroundWorker1 = new BackgroundWorker();
backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
 
backgroundWorker1.RunWorkerAsync();
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    textBox1.Text = "123";
}
 
