Вы используете Task.Sleep () в основном потоке пользовательского интерфейса. Очевидно, вы в конечном итоге заморозить пользовательский интерфейс. Вам следует рассмотреть возможность выполнения ваших расчетов в фоновом режиме с помощью Task.Run
, а затем выполнить задержки с неблокирующим потоком Task.Delay
:
private void btn30_Click(object sender, EventArgs e)
{
Task.Run(async() =>
{
do
{
// Your stuff here...
// Pick one of the two examples below for your case:
// 1. Updates the UI of a WPF application
Application.Current.Dispatcher.Invoke(() =>
{
// Update the UI here...
});
// 2. Updates the UI of a WinForm application
Invoke(new Action(() =>
{
// Update the UI here...
}));
// Make a delay...
await Task.Delay(5000);
} while (true);
});
}
Обратите внимание, что когда вы хотите обновить пользовательский интерфейс из фонового потока, вы должны каким-то образом выполнить свой код, который изменяет пользовательский интерфейс в основном потоке (тот, который создал элементы управления, которые вы обновляете).
Я бы порекомендовал:
Для WPF - Dispatcher.Invoke
Для WinForms - Control.Invoke