C# 使用CancellationTokenSource从按钮取消异步任务单击不工作
我需要做的是取消运行异步的任务。应在单击“取消”按钮时取消任务。我已经用C# 使用CancellationTokenSource从按钮取消异步任务单击不工作,c#,wpf,mvvm,cancellationtokensource,C#,Wpf,Mvvm,Cancellationtokensource,我需要做的是取消运行异步的任务。应在单击“取消”按钮时取消任务。我已经用CancellationTokenSource完成了。但它不能正常工作 公共类classA { CancellationTokenSource _tokenSource=null; public void OnCancelButtonClick() { Show(“你真的想取消上传吗”); _tokenSource=新的CancellationTokenSource(); _tokenSource.Cancel(); } 公
CancellationTokenSource
完成了。但它不能正常工作
公共类classA
{
CancellationTokenSource _tokenSource=null;
public void OnCancelButtonClick()
{
Show(“你真的想取消上传吗”);
_tokenSource=新的CancellationTokenSource();
_tokenSource.Cancel();
}
公共异步void UploadBtnClick(对象参数)
{
_tokenSource=新的CancellationTokenSource();
var token=_tokenSource.token;
尝试
{
等待任务。运行(()=>UploadFunction(token));
}
捕捉(操作取消例外)
{
MessageBox.Show(例如Message);
}
最后
{
_tokenSource.Dispose();
}
}
公共任务上载功能(CancellationToken令牌)
{
弗雷奇
{
//代码在这里
if(令牌.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
}
}
}
}
我正在从另一个函数调用OnCancelButtonClick
公共类B
{
public void CancelUploadBtnExecute(对象参数)
{
FilesViewModel vm=新的FilesViewModel();
vm.OnCancelButtonClick();
}
}
当我点击
OnCancelButtonClick
,IsCancellationRequested
是false
,但没有反映在UploadFunction
中,因此任务不会停止。这是因为您正在OnCancelButtonClick()
中初始化新的取消令牌源代码
只需从OnCancelButtonClick()中删除这一行
UploadFunction
方法正在使用从UploadBtclick
方法中的CancellationTokenSource
创建的令牌。System.NullReferenceException:“对象引用未设置为对象的实例。”\U tokenSource为空。@开发者是否为OnCancelButtonClick方法中的异常?如果是,则添加check If(_tokenSource!=null)。OnCancelButtonClick中的yes异常method@developer如果在OnCancelButtonClick之前调用UploadBtclick,则根据您共享的代码,标记源不能为null。@开发者是否从调用OnCancelButtonClick的同一类调用UploadBtclick?如果UploadBtnClick和OnCancelButtonClick不是从同一个类调用的,那么您必须确保在同一个classA实例上调用UploadBtnClick和OnCancelButtonClick。
_tokenSource = new CancellationTokenSource();