C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 158 を表示中)
■91650 / )  Re[1]: async/awaitの使い方
□投稿者/ 魔界の仮面弁士 (2244回)-(2019/07/17(Wed) 17:28:01)
No91647 (こまお さん) に返信
> 何が良くないのでしょうか。

UI スレッド側で Sleep したり、ループ監視したりしている点が一番良くないです。

それと、"async void" は基本的に使いません。async Task に書き換えましょう。
(async void が必要になるのは、Button_Click 等のイベントハンドラに指定する場合ぐらいです)



もし、AsyncTest クラスの実装を書き換えず、
MainWindow 側だけで無理矢理対処するとしたら…。


private void Button_Click(object sender, RoutedEventArgs e)
{
  var asyncTest = new AsyncTest();
  asyncTest.AsyncMethod();

  while (asyncTest.IsBusy())
  {
    // Thread.Sleep(100);

    var frame = new DispatcherFrame();
    Dispatcher.CurrentDispatcher.BeginInvoke(
      DispatcherPriority.Background,
      new DispatcherOperationCallback(o =>
      {
        ((DispatcherFrame)o).Continue = false;
        return null;
      }),
      frame);
    Dispatcher.PushFrame(frame);
  }

  MessageBox.Show("Done");
}
返信 編集キー/


管理者用

- Child Tree -