在一定时间后停止执行任务的简便方法(Xamarin.Android)

时间:2019-01-16 13:55:10

标签: time task execution

在按钮上单击,我想打开一个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

1 个答案:

答案 0 :(得分:1)

您可以尝试

步骤1.添加计时器

    Timer _timer = new Timer {Interval = 5000};
                        _timer.Elapsed += OnTimeEvent;
                        _timer.Start();

第2步:在计时器事件上取消任务

    private void OnTimeEvent(object sender, ElapsedEventArgs e)
    {
            cts .Cancel();
    }