我必须处理一个奇怪的问题,至少从我的角度来看是这样。我使用任务来等待变量获取特定值,然后再次在 ui 线程上运行“继续”部分。
现在的问题是,在我调用 StartNew() 之前,调用内部的 ManagedThreadId 是相同的,它会冻结我的 UI。
这是我的代码:
// ManagedThreadId here
Task.Factory.StartNew(() =>
{
// and here are the same.
while (isClosing)
{
Thread.Sleep(50);
}
}).ContinueWith((finishedTask) =>
{
if (currentContainer != null)
{
window = currentContainer;
}
else
{
window = CreateBallonWindow();
window.Show();
}
window.Activate();
}, TaskScheduler.FromCurrentSynchronizationContext());
Ideas?
谢谢克里斯托夫
EDIT:
对我来说最有趣的是为什么会发生这种情况而不是如何解决这个问题。
我想了解那里发生了什么......
谢谢大家的提示,
我终于认为我明白了。这里的问题是 TaskScheduler.Current 是调用 StartNew() 时使用的默认调度程序。当使用 TaskScheduler.SynchronizationContext() 时,这不是一个好的组合。
这里的情况是,我(间接)在持续任务中使用 StartNew() 以及 TaskScheduler.SynchronizationContext() 描述的调度程序。因此,默认调度程序是包含 ui 线程的调度程序 --> 在 ui 线程上调用新任务。
特别感谢 Viv 分享链接。这对于了解正在发生的事情有很大帮助。
克里斯托夫
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)