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 矢木浩人