可能有人请帮助我以下的问题:线程安全更新
有两类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