C Sharp 非同期処理からUIスレッドにアクセスし画面を更新する
ナビゲーションに移動
検索に移動
C# 非同期処理からUIスレッドにアクセスし画面を更新する
C Sharp |
例
public partial class MainForm : Form { public MainForm() { } private async void btnHoge_Click(object sender, EventArgs e) { await CrawlGuppy(); } private async Task CallBusyService() { IProgress<string> progress = new Progress<string>(msg => { lblStatus.Text = $"処理中・・・{msg}"; }); await Task.Run(() => { (new Service()).DoBusyTask(progress, "some parameter"); }); } } public class Service() { public void DoBusyTask(IProgress<string> progress, string param) { progress.Report("Message"); } }
例
- Task と Invoke と Delegete を利用
public partial class Form1 : Form { public delegate void UpdateStatusHandler(string msg); public void UpdateStatus(string msg) { lblStatus.Text = msg; } public void DoAsyncTaskButton_Click() { Task task = Task.Factory.StartNew(() => { while (true) { string msg = ""; // some messages lblStatus.Invoke(new UpdateStatusHandler(UpdateStatus), msg); } }); } }
© 2006 矢木浩人