Асинхронность и Корутины в WinForms C#

Столкнулся с такой проблемой, в юнити для асинхронных действий есть очень удобный инструменты IEnumerator, для C# я нагуглил async, но не понял как этим пользоваться

void Start()
{
    StartCoroutine(someCoroutine());
}

IEnumerator someCcoroutine()
{
    yield return new WaitForSeconds(1.0f);
}

Есть-ни что-то подобное в WinForms и как это использовать? К примеру, мне нужно запустить таймер ожидания в отдельном потоке, чтобы потом в нем-же запустить некоторые действия. При этом основной поток должен продолжать свою стандартную работу


Ответы (1 шт):

Автор решения: tym32167

Пример, как по нажатию кнопки подождать 3 секунды асинхронно и запустить какую то работу на пуле потоков

class MyForm : Form
{
    public MyForm()
    {
        var button = new Button() { Text = "Press me!", Width = 200, Height = 50 };
        button.Click+=button_click;
        this.Controls.Add(button);
    }
    
    private async void button_click(object sender, EventArgs args){
        await Task.Delay(3000); // ждем 3 секунды
        await Task.Run(() => {
            // Ваш код тут, 
            // только не пытайтесь работать с элементами формы 
            // из этого потока, не получится. 
            MessageBox.Show("boom!");
        });
    }
}

Результат

...

→ Ссылка