让我们先从代码:C#等任务,而不阻塞UI
private void StartStopService()
{
var task = Task.Run(() => debugService.Iterate());
StartStopInit(true);
//task.Wait();
if (task.IsCompleted)
StartStopInit(false);
}
我试图做一个计划,将通过一个同时不阻塞UI线程中执行的给定的DLL的从DB一个列表。提供的方法在按钮单击时运行,它正在启动一个任务来遍历DLL。
public void Iterate()
{
foreach (var plugin in runningPlugins)
ExecutePlugin(plugin);
}
Execute方法只是一个一个执行DLL。
我需要一个解决方案,在所有DLL完成执行后运行StartStopInit()
方法。如果我把task.Wait()
我会阻止UI ...情况,因为它现在当然不会工作,因为如果任务启动时条件通过。如果我执行某种无限循环来监听更改,我将再次阻止UI。我该如何解决这个问题?
如果您不阻止用户界面,您是否认为您可能能够在其执行过程中再次启动该操作?我的意思是,如果在按钮上调用了“StartStopService”,是否考虑过在这种情况发生时是否需要禁用按钮? –
现在在异步/等待世界中的正常方式是将你的方法标记为“async Task”(而不是'void'),并使用'await task;'等待任务完成。请注意我之前对不阻止用户界面的评论。 –
那么最终的想法是转发按钮点击取消令牌如果任务仍在执行 – Norgul