gpt4 book ai didi

c# - Task.ContinueWith(..., TaskScheduler.FromCurrentSynchronizationContext()) *不* 在 UI 线程上运行的任何场景?

转载 作者:太空狗 更新时间:2023-10-29 17:56:21 25 4
gpt4 key购买 nike

我们正在观察一些奇怪的事情,代码如下:

var task = new Task(...); // run in the background, do something lengthy work
task.ContinueWith(..., TaskScheduler.FromCurrentSynchronizationContext());
task.Start();

那里的第二个任务调用了一个事件,该事件反过来尝试更新 GUI,我们得到了可怕的跨线程异常。

从第二个任务中的方法检查 Thread.CurrentThread.ManagedThreadId 表明它实际上在 UI 线程上运行。

生成任务的代码正在在 UI 线程上运行。

这是否会出错?

最佳答案

假设您使用的是 .NET 4.0,存在一个错误,主线程上的 System.Threading.SynchronizationContext.Current 可能变为 null,您会遇到此问题。如果您可以轻松地重现该问题,首先要检查的是当您调用 TaskScheduler.FromCurrentSynchronizationContext()SynchronizationContext.Current 是否为 null。

在此处查看该问题的详细信息:SynchronizationContext.Current is null in Continuation on the main UI thread

该错误已在 .NET 4.5 中修复。

关于c# - Task.ContinueWith(..., TaskScheduler.FromCurrentSynchronizationContext()) *不* 在 UI 线程上运行的任何场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com