Я прочитал несколько статей об этом, но в настоящее время я не знаю. Я работаю над приложением, где есть TabControl, расположенный в форме. Когда пользователь нажимает на вкладку, я хотел бы, чтобы фоновый процесс работал с потоком пользовательского интерфейса (так как процесс может занять несколько минут). Это прекрасно, однако, если пользователь выбирает другую вкладку, мне бы хотелось, чтобы какая-либо текущая активная задача была отменена, а также внимание к новой вкладке. неОтмена и перезапуск задачи
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, новая задача не запускается (предположительно потому, что она использует тот же токен, который теперь установлен как отмененный) –