众所周知,调用线程无法访问此对象,因为存在不同的问题

本文关键字:存在 因为 问题 对象 线程 调用 访问 众所周知 | 更新日期: 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";             
}
相关文章: