【发布时间】:2013-06-12 00:27:14
【问题描述】:
我已经为一个长时间运行的进程编写了这个示例代码,但是 Windows 窗体会冻结,直到进程完成。如何更改代码以使工作并行运行?
var ui = TaskScheduler.FromCurrentSynchronizationContext();
Task t = Task.Factory.StartNew(delegate
{
textBox1.Text = "Enter Thread";
for (int i = 0; i < 20; i++)
{
//My Long Running Work
}
textBox1.Text = textBox1.Text + Environment.NewLine + "After Loop";
}, CancellationToken.None, TaskCreationOptions.None, ui);
【问题讨论】:
-
尽量不要使用同步上下文来运行它,这意味着你需要启动一个子任务来更新GUI,或者使用invoke。
-
如果我删除“ui”参数,它会引发“跨线程”异常
标签: c# multithreading winforms