Как я могу использовать Async в C #? - PullRequest
0 голосов
/ 28 октября 2019

Я делаю заявку на c #. Приложение представляет собой реализацию конвертера видео. У меня есть две кнопки, называемые конвертировать и конвертировать стоп. Вот что я хочу сделать;Я не хочу, чтобы форма блокировалась сама, даже если я нажму на любой из них. Я могу отменить процесс или закрыть форму в это время. Мне нужно сделать асинхронный, но я не знаю как. Я не могу использовать фонового работника, потому что я в основном имею дело с большими данными. Он может заблокировать форму больше. Пожалуйста, помогите.

конвертируйте код остановки;

private void Button7_Click(object sender, EventArgs e)
    {
        var ffmpeg = new NReco.VideoConverter.FFMpegConverter();
        ffmpeg.Stop();
                MessageBox.Show("convert is stopped");
    }

1 Ответ

3 голосов
/ 28 октября 2019

Пример:

private async void Button7_Click(object sender, EventArgs e)
{
    await Task.Run(() => 
    {
        //code here that takes a long time. NB nothing that must be run on the main thread
        var ffmpeg = new NReco.VideoConverter.FFMpegConverter();
        ffmpeg.Stop();
    });
    //when the above task completes this will then be called on the original thread context (i.e. the main ui thread)
    MessageBox.Show("convert is stopped");
}

Обратите внимание, что MessageBox.Show будет вызываться после завершения задачи, но элемент управления вернется в основной поток при вызове await. Это то, что сбивает с толку людей, плохо знакомых с асинхронностью.

Также обратите внимание, что обычно асинхронная функция будет иметь тип возврата Task или Task<T>, но, поскольку это обработчик событий, она имеет тип возврата void. Это один из немногих случаев, когда возвращаемый тип void верен для асинхронной функции.

...