我發現對於我目前的情況看起來像一個非常簡單的解決方案。使用匿名方法從單獨的線程更新GUI的說明
我目前的情況是,我想對新線程做一些I/O操作,這樣我就不會陷入我的GUI線程。我有一個函數,作爲我的表單的一員,已經完成了這些I/O操作,但是在GUI線程上運行它確實使應用程序很難使用。所以我的計劃是在一個新的線程中運行這個函數。所以,我在表單中創建了一個Thread變量,並試圖讓它使用該函數作爲ThreadStart參數。但它似乎並不喜歡它。
我發現一個優雅的外觀解決方案,作爲對另一個線程的響應,here。
///...blah blah updating files
string newText = "abc"; // running on worker thread
this.Invoke((MethodInvoker)delegate {
someLabel.Text = newText; // runs on UI thread
});
///...blah blah more updating files
從該響應的外觀上來看,我可以在一個新的線程中運行該功能,然後可以使用匿名函數來更新自己的狀態,當線程完成計算。儘管如此,我還不足以填補答覆的空白。
所有我似乎讀到的線程說,我的ThreadStart函數需要是一個新類中的靜態方法。這個迴應似乎表明我可以在我的Form類中完成它,所以this
引用仍然引用我的Form實例。否則,如果我的ThreadStart參數是一個不同的類,我不得不傳入對Form實例的引用,這看起來像更多的代碼,對吧?
有人會幫我填寫該回復的上下文嗎?提前致謝!
哦,真棒。我不知道這存在!非常感謝你。 – Ryan 2012-07-24 16:35:29