WinForms コントロールの非同期更新:UIフリーズ対策
WinFormsでコントロールのデータを非同期で更新するには、Control.BeginInvokeメソッドまたはTask.Runを使用することができます。
- コントロールのBeginInvoke
private async void UpdateControlDataAsync()
{
await Task.Run(() =>
{
// 在异步线程中更新控件数据
string newData = FetchDataFromServer();
// 切换回UI线程更新控件数据
this.BeginInvoke((Action)(() =>
{
// 更新控件数据
label1.Text = newData;
}));
});
}
- タスクを実行
private async void UpdateControlDataAsync()
{
string newData = await Task.Run(() =>
{
// 在异步线程中更新控件数据
return FetchDataFromServer();
});
// 更新控件数据
label1.Text = newData;
}
上記の2つの方法の中で、FetchDataFromServerメソッドは非同期スレッドでデータを取得するために使用されます。更新UIのコードをthis.BeginInvokeまたはawait Task.Runに配置することで、データ更新操作がUIスレッドで実行されることが保証され、スレッドの競合やUIの遅延の問題を回避できます。