В моем проекте у меня мало пользовательских элементов управления, измененных навигацией.Один из элементов управления запускает задачи.Я делаю это так:
public partial class uc_WorkingArea : UserControl
{
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token;
public uc_WorkingArea()
{
InitializeComponent();
this.Unloaded += uc_WorkingArea_Unloaded;
token = cts.Token;
Task Printer1 = Task.Run(() => PrinterPooler(lst_PrinterStruct, 0), cts.Token);
}
private void uc_WorkingArea_Unloaded(object sender, RoutedEventArgs e)
{
cts.Cancel();
if (token.CanBeCanceled)
{
MessageBox.Show("Can be canceled");
}
if (token.IsCancellationRequested)
{
MessageBox.Show("Canceled requested");
}
cts.Cancel();
MessageBox.Show("Status: " + Printer1.Status.ToString());
}
}
Когда я покидаю текущий пользовательский контроль и выполняю переключение на другое uc_WorkingArea_Unloaded.Я вижу сообщения, что Задача может быть отменена, и запрос на отмену принят.
Но, текущий статус задачи Printer1 по-прежнему "IsRunning".Итак, если я вернусь обратно к этому пользовательскому элементу управления, Задача запустится снова, и в Приложении будут запущены две похожие задачи.
Я попытался запустить задачу под Factory, как это
Task Printer1 = Task.Factory.StartNew(() => PrinterPooler(lst_PrinterStruct, 0), cts.Token);
Но безуспешно.Приложение по-прежнему выполняет две похожие задачи.
Метод PrinterPooler не асинхронный.
Я не могу понять, где была допущена ошибка.Ваша помощь, ребята, нужна.