北の窓から(芦田っち)

PC関連と私的雑感のブログ。
2015年7月10日、カッコ内に名前を加えました。昔の友だちに気付いてほしくて・・・

おやぢチップス(22):最も簡単な非同期処理 Async-Await (VB.NET)

2016-03-16 09:10:05 | おやぢチップス
非同期処理がこんなに楽に作れます。

これまでは BackgroundWorker を使っていましたが、
これはどうも直感的ではなかった。

Async-Await なら、分かりやすく、コードもシンプル。

サンプルを探していたら、こんな簡単な例が見つかりました。

VB.NET simpler Async Await example

上の例から関係するコードを抜粋すると、たったこれだけ。
____________________________________________________________________
Public Class Form1
  ' --- 時間のかかる処理(UI は変更できない)
  Sub LongOperation()
     Threading.Thread.Sleep(5000)
  End Sub
  ' ---
  Private Async Sub cmdAsynchronous_Click(sender As Object, e As EventArgs) Handles cmdAsynchronous.Click
    lblStatus.Text = "Running a long operation asynchronously... (UI thread should be fully responsive)"
      Await Task.Run(Sub()
             LongOperation() ' --◀ 時間のかかる処理
            End Sub)
    lblStatus.Text = "Done running the long operation asynchronously."
  End Sub
  ' ---
End Class
____________________________________________________________________

非同期で処理を実行している間はプログレスバーを表示するようにしてみました。

画面はこんな感じです。

プログラム起動時:
  

非同期処理を実行中:(プログレスバーが進行)
  

非同期処理が終わった:
  

コードはたったこれだけ。
____________________________________________________________________
Public Class Form1
  ' --- フォームロード時:プログレスバーを非表示 ----------
  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.ProgressBar1.Visible = False
  End Sub

  ' --- [Async] を付けた sub --------------------
  Private Async Sub cmdAsynchronous_Click(sender As Object, e As EventArgs) _
    Handles cmdAsynchronous.Click
    ' ---
    Me.lblStatus.Text = "非同期処理を実行中・・・(UI は応答する)"
    Me.ProgressBar1.Visible = True
    ' --- LongOperation を非同期に実行
    Await Task.Run(Sub()
            LongOperation() ' --◀ 時間のかかる処理
            End Sub)
    ' --- 非同期処理が終わった
    Me.ProgressBar1.Visible = False
    Me.lblStatus.Text = "非同期処理が終わった"
  End Sub

  ' --- 非同期処理: 時間のかかる処理(ここでは 5秒の待ち時間)-------------
  Private Sub LongOperation()
    Threading.Thread.Sleep(5000)
  End Sub
End Class
____________________________________________________________________

一般的な記事ではなく、おやぢチップスには不似合いかなと思ったのですが、
ま、自分のメモにもなるので投稿します。

ご参考になれば幸い・・・


ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・


ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・

コメント (6)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 2週間前に逆戻り:Back into ... | トップ | Windows 10[39]:相変わら... »
最新の画像もっと見る

6 コメント

コメント日が  古い順  |   新しい順
Unknown (Unknown)
2018-07-11 17:42:23
このコードじゃプログレスバー動かないでしょ。
コードで動かそうとはしてません (北窓舎のオヤヂ)
2018-07-11 17:46:03
プログレスバーは、コードでなく、デザイナーで定義しています。
Unknown (Unknown)
2018-07-13 10:52:48
いや、定義とかそういうことではなくて、Me.ProgressBar1のValue値を変化させないと動かないでしょ?
ってことを言ってます。
プログレスバーは Marquee (北窓舎のオヤヂ)
2018-07-13 11:06:51
デザイナーで、プログレスバーの Style は Marquee にしています。画像の2つめ(プログレスバー進行中)を見てください。
Unknown (Unknown)
2018-07-13 12:00:29
なるほど!当方理解不足でした。失礼しました。
読者を意識して書くのは難しいですね (北窓舎のオヤヂ)
2018-07-13 12:20:09
ご納得いただき、ありがとうございます。

記事のトピックが非同期処理なので、プログレスバーについては説明しておりませんでした。
これからは、もう少し親切な記事が書けるよう努力してみます。

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

おやぢチップス」カテゴリの最新記事