请问有人能帮我解决以下问题:
有两个类MainForm和LWriter。下面是来自LWriter的一个方法,除了写入文件外,还通过mainForm.UpdateLog(text)向RichTextBox控件发送一些更新。一切都运作良好,但是这个WriteOutput方法还会进行一些复杂的处理,在计算期间会使窗体冻结。
我认为应该将WriteOutput封装在单独的线程中。请问有人能帮我解释如何将WriteOutput(LWriter类)放置在一个线程中,并以安全的方式从主窗体中调用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) { ... }
}
BackgroundWorker
类。在DoWork
方法中,您需要适当地保护任何可能共享的对象(并且不要触摸UI)。在DoWorkCompleted
事件中,您可以更新UI。 - user166390