我正在用 C# 开发 Metro 应用程序,我正在使用 async 和 await 关键字来创建 make 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
并将 token 传递给该方法。
var source = new CancellationTokenSource();
await DownloadData(source.Token);
当您需要取消时,您可以在源上调用Cancel()
source.Cancel();
关于c# - 如何在 C# Metro 应用程序中停止异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15924297/