【发布时间】:2014-11-04 07:38:26
【问题描述】:
我知道我错过了一些愚蠢的东西,“StartProcess”方法使 UI 没有响应,并且没有多少谷歌搜索和教程让我得到答案。
这是我的代码:
public MainWindow()
{
InitializeComponent();
txtBlock.Text = "Testing";
Initialize();
}
public void Initialize()
{
uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
StartProcess();
}
async void StartProcess()
{
Task<int> result = Task.Factory.StartNew(() =>
{
txtBlock.Text += ("\n starting updater");
while (true)
{
Thread.Sleep(3000);
}
return 0;
}, CancellationToken.None, TaskCreationOptions.LongRunning, uiScheduler);
}
一些背景知识:我正在构建一个应用程序,该应用程序必须每 5 分钟轮询一次数据库,并使用用户的待办事项列表更新 UI,因此是 while(true) 循环。该应用程序必须在其整个生命周期内不断地轮询数据库。
【问题讨论】:
-
您可以尝试使用
Task.Delay而不是Thread.Sleep。目前,您似乎在 UI 线程上调用Thread.Sleep,这将使您的 UI 无响应。此外,简单地使您的方法async不会发挥作用。 -
你应该看看Rx。
标签: wpf async-await