可能有人請幫助我以下的問題:線程安全更新
有兩類MainForm,然後LWriter。下面是一個來自LWriter的方法,除了寫入文件之外,還向RichTextBox控件發送一些更新(通過mainForm.UpdateLog(text))。一切正常,但是,這個WriteOutput方法也做了一些廣泛的處理,在計算過程中凍結了表單。
我認爲WriteOutput應該封裝在一個單獨的線程中。有人能幫我解釋一下如何在一個線程中放置WriteOutput(LWriter類),然後以安全的方式從mainFrom調用mainForm.UpdateLog()。
我是新來的線程,因此幫助將不勝感激。
public void WriteOutput(string output, Links[] links)
{
try {
using (StreamWriter sw = new StreamWriter(output)) {
for (int x= 1; x<links.Length;x++) {
...
sw.WriteLine(...);
sw.Flush();
}
mainForm.UpdateLog(<text>);
}
} catch(Exception e) { ... }
}
爲什麼使線程複雜化?無論如何,在WinForms的背景中做一些最簡單的方法之一就是使用'BackgroundWorker'類。在DoWork方法中,您需要保護可能共享的任何對象(並且不*觸及UI)。在「DoWorkCompleted」事件中,您可以更新UI。 – 2012-01-10 18:28:19