讓我們先從代碼: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