使用Win.Forms控件在C#中进行multithreading处理

我是C#的初学者。 当我使用win.forms时,我的线程有问题。 我的申请冻结了。 这段代码有什么问题? 我正在使用msdn的 microsoft示例。 这是我的代码:

delegate void SetTextCallback(object text); private void WriteString(object text) { // InvokeRequired required compares the thread ID of the // calling thread to the thread ID of the creating thread. // If these threads are different, it returns true. if (this.textBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(WriteString); this.Invoke(d, new object[] { text }); } else { for (int i = 0; i <= 1000; i++) { this.textBox1.Text = text.ToString(); } } } private void button1_Click(object sender, EventArgs e) { Thread th_1 = new Thread(WriteString); Thread th_2 = new Thread(WriteString); Thread th_3 = new Thread(WriteString); Thread th_4 = new Thread(WriteString); th_1.Priority = ThreadPriority.Highest; // самый высокий th_2.Priority = ThreadPriority.BelowNormal; // выше среднего th_3.Priority = ThreadPriority.Normal; // средний th_4.Priority = ThreadPriority.Lowest; // низкий th_1.Start("1"); th_2.Start("2"); th_3.Start("3"); th_4.Start("4"); th_1.Join(); th_2.Join(); th_3.Join(); th_4.Join(); } 

有一个死锁 – 当线程正在尝试使用阻塞Control.Invoke()向UI发送消息时,UI线程正在等待线程完成Thread.Join() Control.Invoke() 。 通过BeginInvoke()替换线程代码中的Invoke将使死锁消失

  if (this.textBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(WriteString); // BeginInvoke posts message to UI thread asyncronously this.BeginInvoke(d, new object[] { text }); } else { this.textBox1.Text = text.ToString(); } 

它因Join调用而冻结。 Thread.Join()使当前线程在另一个线程完成后等待。