假设您有一个C#WinForms应用程序进行一些数据处理.您有一个方法可以从UI线程调用的数据库中检索数据.然后运行后台线程来执行此任务.您希望UI继续执行其操作,而不是被锁定和无响应.
如何让后台线程运行并进行处理,然后在返回结果时自动提醒UI线程?
我知道我错过了一些愚蠢的东西,"StartProcess"方法使得用户界面没有反应,没有大量的谷歌搜索和教程让我得到答案.
这是我的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
一些背景:我正在构建一个必须每5分钟轮询一次数据库的应用程序,并用用户的待办事项列表更新UI,因此是while(true)循环.该应用程序必须在其整个生命周期内连续轮询数据库.