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

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

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

Re[2]: BackgroundWorker → Task


(過去ログ 164 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■94852 / inTopicNo.1)  BackgroundWorker → Task
  
□投稿者/ furu (36回)-(2020/05/26(Tue) 15:01:12)

分類:[C#] 

2020/05/26(Tue) 15:06:28 編集(投稿者)
2020/05/26(Tue) 15:05:45 編集(投稿者)
2020/05/26(Tue) 15:05:35 編集(投稿者)

VS2019 .NET Framework 4.7.2 System.Windows.Forms

BackgroundWorkerをTaskに書き換えようとしているのですが
非同期処理終了時の処理がうまく動いてくれません。

やりたいこと
  フォーム表示(ShowDialog)で非同期処理を開始し、
  非同期処理終了でフォームをクローズする。

BackgroundWorker
    Form_Shownイベント
        this.backgroundWorker.RunWorkerAsync(this.workerArgument);
    backgroundWorker_RunWorkerCompletedイベント
        this.Close();

Task
    Form_Shownイベント
        Task.Run(処理)
            .ContinueWith(
                _ => {this.Close(); },
                TaskContinuationOptions.ExecuteSynchronously);
    //Close()はエラーなく実行されているようだが
    //フォームが閉じない

よろしくお願いします。

引用返信 編集キー/
■94853 / inTopicNo.2)  Re[1]: BackgroundWorker → Task
□投稿者/ Hongliang (1036回)-(2020/05/26(Tue) 15:15:48)
VS2019を使用されてるのであれば、Task::ContinueWithではなくてasync/awaitを使用すべきです。
async void Form_Shown(...)
{
    await Task.Run(...);
    this.Close();
}

引用返信 編集キー/
■94854 / inTopicNo.3)  Re[2]: BackgroundWorker → Task
□投稿者/ furu (38回)-(2020/05/26(Tue) 16:43:56)
No94853 (Hongliang さん) に返信
> VS2019を使用されてるのであれば、Task::ContinueWithではなくてasync/awaitを使用すべきです。
> async void Form_Shown(...)
> {
> await Task.Run(...);
> this.Close();
> }
ありがとうございます。
うまくいきました。

awaitだと非同期処理が完了するまで
Form_Shownからreturnしないと勘違いしていました。

たとえは悪いかもしれませんが
yield returnみたいですね。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -