我需要处理一个奇怪的问题,至少在我看来是这样。我使用一个任务来等待变量获得特定的值,然后再次在UI线程上运行Continue部分。
现在的问题是,在调用StartNew()之前和其中,ManagedThreadId相同,并且它会冻结我的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());
有什么想法吗?
谢谢克里斯托夫。
编辑:
对我来说最有趣的是为什么会出现这种情况,而不是如何解决这个问题。我想了解那里发生了什么...
ThreadPool
)为10。 - Adam HouldsworthTask.Factory.StartNew
不能保证生成一个新的线程。请参考 此答案 了解更多详细信息,同时也请查看其前两个评论。正如链接答案中的第四条评论所述,您还可以尝试指定TaskCreationOptions.LongRunning
,以强制为任务生成一个新线程。 - VivTaskScheduler
,它不使用吗?对我来说,这是线程池(根据我的调试器)。 - Adam HouldsworthTaskScheduler.FromCurrentSynchronizationContext()
返回的内容。如果您已经在线程池上,则线程ID可能保持不变。 - usr