Простой способ остановить выполнение задачи через определенное время (Xamarin.Android) - PullRequest
0 голосов
/ 16 января 2019

При нажатии кнопки я хочу открыть 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 голосов
/ 17 января 2019

Вы можете попробовать

шаг 1. Добавление таймера

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

шаг 2. Отменить задание по событию таймера

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