众所周知,调用线程无法访问此对象,因为存在不同的问题
本文关键字:存在 因为 问题 对象 线程 调用 访问 众所周知 | 更新日期: 2023-09-27 18:36:35
这就是我的代码的设置方式。但是,在方法2中更新myUIElement时,我遇到了异常。
"调用线程无法访问此对象,因为不同的 线程拥有它。
等待之后的任何内容是否应该始终在 UI 线程上调用?我在这里做错了什么?
private async void Method1()
{
// I want to wait until Method2 is completed before doing anything else in Method1
await Task.Factory.StartNew(() => Method2());
}
private async void Method2()
{
// Reading few things from configuration etc
await Task.Factory.StartNew(() => SomeAPILoadDataFromSomewhere());
myUIElement.Text = "something useful has happened";
}
}
当您实际上不希望相关代码在非 UI 线程中运行时,不应使用 StartNew
。 只需将其完全删除即可。
另请注意,应仅将async void
方法作为顶级事件处理程序。 要await
的任何异步方法都应返回Task
。
在可能的情况下,您通常还应该使用 Task.Run
而不是StartNew
。
//This should return a Task and not void if it is used by another asynchronous method
private async void Method1()
{
await Method2();
DoSomethingElse();
}
private async Task Method2()
{
await Task.Run(() => SomeAPILoadDataFromSomewhere());
myUIElement.Text = "something useful has happened";
}