| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

C Sharp 非同期処理からUIスレッドにアクセスし画面を更新する

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

C# 非同期処理からUIスレッドにアクセスし画面を更新する

C Sharp |

  1. public partial class MainForm : Form
  2. {
  3.  
  4. public MainForm()
  5. {
  6. }
  7.  
  8. private async void btnHoge_Click(object sender, EventArgs e)
  9. {
  10. await CrawlGuppy();
  11. }
  12.  
  13. private async Task CallBusyService()
  14. {
  15.  
  16. IProgress<string> progress = new Progress<string>(msg =>
  17. {
  18. lblStatus.Text = $"処理中・・・{msg}";
  19. });
  20.  
  21. await Task.Run(() =>
  22. {
  23. (new Service()).DoBusyTask(progress, "some parameter");
  24. });
  25. }
  26. }
  27.  
  28. public class Service()
  29. {
  30. public void DoBusyTask(IProgress<string> progress, string param)
  31. {
  32. progress.Report("Message");
  33. }
  34. }
  35.  




  • Task と Invoke と Delegete を利用
  1. public partial class Form1 : Form
  2. {
  3. public delegate void UpdateStatusHandler(string msg);
  4.  
  5. public void UpdateStatus(string msg)
  6. {
  7. lblStatus.Text = msg;
  8. }
  9. public void DoAsyncTaskButton_Click()
  10. {
  11. Task task = Task.Factory.StartNew(() =>
  12. {
  13. while (true)
  14. {
  15. string msg = ""; // some messages
  16. lblStatus.Invoke(new UpdateStatusHandler(UpdateStatus), msg);
  17. }
  18. });
  19. }
  20. }