【发布时间】:2023-03-03 01:03:01
【问题描述】:
当我在UpdateGuItemsAsync 中使用Thread.Sleep 时,程序冻结10 秒,因为线程被阻塞。如果我在“UpdateGuItemsAsync”中使用Task.Delay,代码会立即执行而不会暂停。我希望在不冻结 UI 的情况下在列表更新之前得到延迟。如何在 .net 3.5 中做到这一点?
TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(UpdateGuItemsAsync, CancellationToken.None, TaskCreationOptions.None, uiScheduler);
public void UpdateGuItemsAsync()
{
System.Threading.Thread.Sleep(10000);
for (int i = 0; i < 100; i++)
{
Gu45Document gu45Document = new Gu45Document();
gu45Document.Form = "EU-45";
Gu45Documents.Add(gu45Document);
}
}
【问题讨论】:
-
如果您的 UI 代码是 Wpf,我可以建议您查看 UI 主线程
Dispatcher。 stackoverflow.com/questions/11625208/… -
在 UI 线程上调用
Task.Factory.StartNew和TaskScheduler.FromCurrentSynchronizationContext();与直接在 UI 线程上运行代码是一回事。这里不涉及多线程。
标签: c# multithreading