Рассмотрим таймер, который будет срабатывать при событии Clicked в приложении WPF, например:
private async void Button_Click(object sender, RoutedEventArgs e)
{
Timer t = new Timer(DoingWorkOnUI,null,0,5000);
//Also doing long execution time job here. in another thread
}
В основном проблема заключается в том, что, если пользователь закрывает приложение, мой таймер все еще работает и никогда не выставляетсяв результате задача была отменена ошибка.Я хотел бы убрать это в его обратном вызове, но я не могу понять, как я это сделаю.
Вот моя попытка, я могу ошибаться, но я могу хорошо отменить отмену, я просто не могу найти решение о том, как избавиться от таймера.
private void DoingWorkOnUI(object state) {
cts = new CancellationTokenSource();
var token = cts.Token;
try
{
token.ThrowIfCancellationRequested();
this.Dispatcher.Invoke((Action)(() =>
{
\\Doing work on UI
}));
}
catch (OperationCanceledException)
{
//Dispose Timer here ???
}
finally {
//Disposing token
cts.Dispose();
}
}