我已經閱讀了一些關於此的文章,但我目前沒有任何明智之舉。我正在製作一個TabControl位於窗體上的應用程序。當用戶點擊標籤頁時,我希望後臺進程從UI線程運行(因爲該過程可能需要幾分鐘)。這很好,但是如果用戶選擇不同的選項卡,我想要取消任何當前活動的任務,並且要注意轉到新選項卡。取消並重新啓動任務
private void ParentTabControl_SelectedIndexChanged(object sender, EventArgs e)
{
Task testTask;
CancellationTokenSource testSource = new CancellationTokenSource();
CancellationToken testToken = testSource.Token;
switch (ParentTabControl.SelectedIndex)
{
case 0:
updateSummaryTab();
break;
case 1:
testTask = Task.Run(() =>
{
updateTabOne();
}, testToken);
break;
case 2:
updateTabTwo();
break;
}
}
如果我設置testSource取消,那麼這將不再使用(雖然我知道我將需要使用某種形式的令牌)。我之前爲每個選項卡使用了不同的BackgroundWorker,並簡單地檢查了它的IsBusy屬性,但我認爲使用單個回收的任務可能是更好的選擇。
你有什麼具體問題?似乎所有你需要做的是取消任何傑出的工作,當標籤切換並開始新的工作。 – usr
我得到的問題是當我使用CancellationToken取消任務時,新任務無法啓動(可能是因爲它使用相同的標記,現在設置爲取消) –