【发布时间】:2017-03-14 18:06:04
【问题描述】:
所以我有类似的代码
private void doSmth()
{
str = makeStr();
}
private void button_Click(object sender, EventArgs e)
{
Task task = new Task(doSmth);
task.Start();
task.Wait();
textBox.Text = str;
}
太冷了,我知道为什么会因为Wait() 而发生这种情况。我试图像这样使用ContinueWith()
task.ContinueWith((t) => {textBox.Text = str;});
但抛出InvalidOperationException 不起作用:
调用线程无法访问该对象,因为不同的 线程拥有它
我该如何解决这个问题?也许我应该完全使用另一种方法来实现我想要的。谢谢。
【问题讨论】:
-
可以使用异步等待吗?也永远不要打电话给
new Task(foo),冷任务很容易搞砸(就像你做的那样)。请改用Task.Run(或Task.Factory.StartNew。 -
阅读开始调用..
-
@fabricio
Control.Invoke/Control.BeginInvoke在您正确使用async/await时是不必要的。
标签: c# multithreading winforms task