【发布时间】:2021-05-01 09:48:12
【问题描述】:
我需要做的是能够取消正在异步运行的任务。单击取消按钮时应取消任务。我已经用CancellationTokenSource 做到了。但它不能正常工作。
public class classA
{
CancellationTokenSource _tokenSource = null;
public void OnCancelButtonClick()
{
MessageBox.Show("Do you Really want to cancel upload");
_tokenSource = new CancellationTokenSource();
_tokenSource.Cancel();
}
public async void UploadBtnClick(object param )
{
_tokenSource = new CancellationTokenSource();
var token = _tokenSource.Token;
try
{
await Task.Run(() => UploadFunction(token));
}
catch(OperationCanceledException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
_tokenSource.Dispose();
}
}
public Task<bool> UploadFunction(CancellationToken token)
{
foreach
{
//code here
if (token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
}
}
}
}
我正在从另一个函数调用OnCancelButtonClick
public class classB
{
public void CancelUploadBtnExecute(object param)
{
FilesViewModel vm = new FilesViewModel();
vm.OnCancelButtonClick();
}
}
当我点击 OnCancelButtonClick 时,IsCancellationRequested 是 false,但不会反映在 UploadFunction 中,因此任务不会停止。
【问题讨论】:
标签: c# wpf mvvm cancellationtokensource