在按钮上单击,我想打开一个ProgressDialog
,它将一直显示到执行task
为止,但是我希望能够停止任务,即使该任务在完成某些操作后仍未完成多少时间。我在互联网上看到了很多解决方案,但是它们很长。我想知道是否有更简单的方法。
这是我的On Button Click
事件:
private async void Btn_Click(object sender, System.EventArgs e)
{
var mDialog = new ProgressDialog(this);
mDialog.SetMessage("Loading data...");
mDialog.SetCancelable(false);
mDialog.Show();
CancellationTokenSource cts = new CancellationTokenSource();
cts.CancelAfter(5000);
Task<int> task = new Task<int>(Foo, cts.Token);
task.Start();
int integer = await task;
mDialog.Dismiss();
txtView.Text = integer.ToString();
}
这是我将在任务中执行的方法:
public int Foo()
{
System.Threading.Thread.Sleep(10000);
return 100;
}
是否可以在执行5th second
时停止任务,而无需大量更改我刚刚粘贴的代码,例如,仅将一些时间或对象传递给任务的构造函数,也无需执行Foo()
方法async
答案 0 :(得分:1)
您可以尝试
步骤1.添加计时器
Timer _timer = new Timer {Interval = 5000};
_timer.Elapsed += OnTimeEvent;
_timer.Start();
第2步:在计时器事件上取消任务
private void OnTimeEvent(object sender, ElapsedEventArgs e)
{
cts .Cancel();
}