我有一個方法,它在執行時更新一個richtextbox。我必須調用這個方法幾次,而不會阻塞GUI。一旦通話結束並且richtextbox被填充,我必須阻止流向用戶顯示一些信息(接下來的方法調用不應該啓動)。我用MessageBox.Show()完成了這個。如何阻止流程,但保持圖形用戶界面的響應
這裏出現另一個問題,我必須能夠在任何給定的時間中止程序,但模式messagebox不讓我這樣做。也許你會告訴我要獲得另一個表單並模擬消息框,但是,嘿,如果模式框將被替換,我仍然需要阻止流程。
我有一個方法,它在執行時更新一個richtextbox。我必須調用這個方法幾次,而不會阻塞GUI。一旦通話結束並且richtextbox被填充,我必須阻止流向用戶顯示一些信息(接下來的方法調用不應該啓動)。我用MessageBox.Show()完成了這個。如何阻止流程,但保持圖形用戶界面的響應
這裏出現另一個問題,我必須能夠在任何給定的時間中止程序,但模式messagebox不讓我這樣做。也許你會告訴我要獲得另一個表單並模擬消息框,但是,嘿,如果模式框將被替換,我仍然需要阻止流程。
是的,這是一個多線程問題。有很多方法可以實現這一點。以下是關於多線程的解釋。 What is multi-threading?
而且,這裏的一對多線程我最喜歡的教程:albahari.com
線程有自己的堆棧,並獨立運作。下面是如何產生一個線程一個例子:
Thread _thread = new Thread(() => { MessageBox.Show("Hello world!", "Spawned in a different thread"); });
_thread.Start();
從另一個線程調用您的RichTextBox,要做到這一點是創建表單裏面的方法是通過調用其附加文字到您的文本框的方法之一。這裏是如何做到這一點的例子:
public void AddText(string Text)
{
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(AddText); // Delegate
this.Invoke(d, new object[] { text });
}
else { this.textBox1.AppendText(text); }
}
下面是一個MSDN參考你想要做什麼:
請不要發佈版本特定的鏈接到MSDN文章,除非答案是版本特定的。 – 2012-03-25 08:45:34
請說明你的意思。當你說「阻止流量」時,你是什麼意思? – 2012-03-25 00:27:49
我必須調用該方法10次。讓我們說,第一次電話後,第二個不應該開始,直到我這樣說。 MessageBox正是這樣做的,但是,這個MessageBox也不讓我點擊中止。 – 2012-03-25 00:32:30
這是一個多線程問題嗎? – Spencer 2012-03-25 00:53:59