Асинхронность и Корутины в 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!");
});
}
}
Результат
