Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用CancellationTokenSource从按钮取消异步任务单击不工作_C#_Wpf_Mvvm_Cancellationtokensource - Fatal编程技术网

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();