.net 4.5 异步任务,如何取消?在线等

a121984376 2013-04-09 09:34:52
 private async void btnRequest_Click(object sender, EventArgs e)
{
this.btnRequest.Enabled = false;
var type = this.dropType.Text;
var date = this.dateTimePicker1.Value;
var result = await Task.Run(() =>
{
var requester = RequesterFactory.CreateRequester(type, date);
return requester.Request();

});
this.btnRequest.Enabled = true;

if (result.Result)
{
RequestForm form = new RequestForm(result);
form.ShowDialog();
}
else
{
MessageBox.Show(result.Message);
}
}


        private void btnCancel_Click(object sender, EventArgs e)
{
this.TokenSource.Token.Register(() => MessageBox.Show("1"));
this.TokenSource.Cancel();
}

以上代码是一个简单的异步任务,任务去执行网络连接等时间长的请求去了,现在我想增加一个取消的方法,该怎么做呢?
...全文
55 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
宝_爸 2013-04-09
  • 打赏
  • 举报
回复
private async void Start_Button_Click(object sender, RoutedEventArgs e) { var progressIndicator = new Progress<int>(ReportProgress); cts = new CancellationTokenSource(); try { int x = await UploadPicturesAsync(GenerateTestImages(), progressIndicator, cts.Token); } catch (OperationCanceledException ex) { //Do stuff to handle cancellation } } 然后在其他地方就可以cts.Cancel();了。 全部文章参考: Async in 4.5: Enabling Progress and Cancellation in Async APIs http://blogs.msdn.com/b/dotnet/archive/2012/06/06/async-in-4-5-enabling-progress-and-cancellation-in-async-apis.aspx

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧