【发布时间】:2018-10-16 10:42:59
【问题描述】:
关于我的问题的一些信息:
我有一个 Windows 窗体应用程序,它有一个多线程,可以长时间并行计算。在计算这些线程修改 UI 元素(例如标签、文本框、按钮等)并写入 RichTextBox 时。
我有很多线程安全调用的委托,并多次检查 InvokeRequired。
我有很多这样的方法:
private void AppendText(string text)
{
if(richTextBox.InvokeRequired)
{
Invoke(myDelegate, new object[] { text });
}
else
{
richTextBox.Append(text);
}
}
我的问题是:
这是从后台线程修改 UI 线程控件的好方法,还是我犯了一些架构错误?
【问题讨论】:
-
是的
Async-Await是最好和更简洁的方法,同时处理在后台进行,Ui 会在 Ui 线程上自动更新,无需复杂的代码
标签: c# multithreading thread-safety