如何在c#metro应用程序中停止异步任务
我正在使用c#开发metro应用程序,我正在使用异步并等待关键字来创建地铁异步操作(下载数据等)。我总是显示模式“Please wait”对话框。我想添加“取消”按钮到这个模式对话框以允许取消后台操作。 但我不知道如何取消处理任务...有没有任何例子如何做到这一点?如何在c#metro应用程序中停止异步任务
这是我的任务,例如:
// Starts task
public void StartTask()
{
// show the modal dialog with progress
_progressDialog.IsOpen = true;
_progressDialog.CancelClick += ProgressDialog_CancelClick;
await ToWork();
_progressDialog.IsOpen = false;
}
// Task which takes some seconds
private async Task DoWork()
{
await DownloadData();
await ProcessData();
}
// Cancel task
private void CancelClick(object sender, RoutedEventArgs e)
{
// hide the modal dialog with progress
_progressDialog.IsOpen = false;
// TODO: Cancel task
GoBack(this, e);
}
您可以决定执行DownloadData
和ProcessData
,以便他们采取了CancellationToken
并传递给他们,当您需要取消。
public Task DownloadData(CancellationToken tok)
{
tok.ThrowIfCancellationRequested();//check that it hasn't been cancelled.
//while doing your task check
if (tok.IsCancellationRequested)
{
// whatever you need to clean up.
tok.ThrowIfCancellationRequested();
}
}
对于用法,您可以创建一个CancellationTokenSource
并将令牌传递给该方法。
var source = new CancellationTokenSource();
await DownloadData(source.Token);
当您需要取消,你可以拨打Cancel()
来源
source.Cancel();
有没有复制和粘贴的例子? – 2013-04-10 11:20:13
@MythRush,在某些时候,你实际上必须明白你在做什么! – spender 2013-04-10 11:22:41
你'StartTask()'方法使用'ToWork()',但我只能看到一个'的DoWork()'方法。这是故意的吗? – Nolonar 2013-04-10 11:22:12