Myt*_*ush 3 c# microsoft-metro
我正在使用c#开发metro应用程序,我正在使用async并等待关键字来创建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);
}
Run Code Online (Sandbox Code Playgroud)
sca*_*tag 10
你可以决定实现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();
}
}
Run Code Online (Sandbox Code Playgroud)
对于用法,您可以创建一个CancellationTokenSource并将令牌传递给该方法.
var source = new CancellationTokenSource();
await DownloadData(source.Token);
Run Code Online (Sandbox Code Playgroud)
当您需要取消时,您可以呼叫Cancel()来源
source.Cancel();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1402 次 |
| 最近记录: |