0
我使用按鈕和文本框的形式。 Button正在啓動正在更新文本框值的線程。線程更新GUI在隨機時刻凍結
public Form1()
{
InitializeComponent();
myDelegate = new UpdateUi(updateUi);
}
private void button1_Click(object sender, EventArgs e)
{
myThread = new Thread(new ThreadStart(ThreadFunction));
myThread.Start();
}
private void ThreadFunction()
{
MyThreadClass myThreadClassObject = new MyThreadClass(this);
myThreadClassObject.Run();
}
private void updateUi(int i)
{
textBox1.Text = i.ToString();
Thread.Sleep(1000);
}
public Thread myThread;
public delegate void UpdateUi(int i);
public UpdateUi myDelegate;
和ThreadClass:
public class MyThreadClass
{
Form1 myFormControl1;
public MyThreadClass(Form1 myForm)
{
myFormControl1 = myForm;
}
public void Run()
{
// Execute the specified delegate on the thread that owns
// 'myFormControl1' control's underlying window handle.
for(int i=0;i<100;i++)
{
if(myFormControl1.InvokeRequired)
{
myFormControl1.Invoke(myFormControl1.myDelegate,i);
}
}
}
}
正如你可以看到有沒有什麼特別的,我的代碼,但有時代碼凍結。
例如它會出現1-> 2-> 3-> freeze-> 16-> 17等等。
我把代碼HERE很少修改
示例中的'Thread.Sleep'只是爲了減慢速度。你不需要那麼簡單,只需將它從代碼中移除即可。 – 2014-09-22 10:54:26
那麼你告訴我'Thread.Sleep'是造成這種奇怪的行爲的原因嗎? – szpic 2014-09-22 10:59:09
他需要它才能看到'textBox1'中的數字。 – GeorgeChond 2014-09-22 11:00:14