![](https://blogimg.goo.ne.jp/user_image/4f/ee/f1f098e08e483bc9f7db74854b682956.png)
非同期処理がこんなに楽に作れます。
これまでは 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
____________________________________________________________________
非同期で処理を実行している間はプログレスバーを表示するようにしてみました。
画面はこんな感じです。
プログラム起動時:
![](https://blogimg.goo.ne.jp/user_image/58/f2/4b39560deaff0d2a21b5ee53a045951a.png)
非同期処理を実行中:(プログレスバーが進行)
![](https://blogimg.goo.ne.jp/user_image/67/27/60cefec55a7d6614cf2cd7a8ea187e6a.png)
非同期処理が終わった:
![](https://blogimg.goo.ne.jp/user_image/06/c8/0ac475ee3b7c12ef8ab8a820186b9e23.png)
コードはたったこれだけ。
____________________________________________________________________
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
____________________________________________________________________
一般的な記事ではなく、おやぢチップスには不似合いかなと思ったのですが、
ま、自分のメモにもなるので投稿します。
ご参考になれば幸い・・・
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
![](https://blogimg.goo.ne.jp/user_image/74/f8/4c92568b05b542c5adef7ac20a148706.png)
これまでは 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
____________________________________________________________________
非同期で処理を実行している間はプログレスバーを表示するようにしてみました。
画面はこんな感じです。
プログラム起動時:
![](https://blogimg.goo.ne.jp/user_image/58/f2/4b39560deaff0d2a21b5ee53a045951a.png)
非同期処理を実行中:(プログレスバーが進行)
![](https://blogimg.goo.ne.jp/user_image/67/27/60cefec55a7d6614cf2cd7a8ea187e6a.png)
非同期処理が終わった:
![](https://blogimg.goo.ne.jp/user_image/06/c8/0ac475ee3b7c12ef8ab8a820186b9e23.png)
コードはたったこれだけ。
____________________________________________________________________
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
____________________________________________________________________
一般的な記事ではなく、おやぢチップスには不似合いかなと思ったのですが、
ま、自分のメモにもなるので投稿します。
ご参考になれば幸い・・・
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
![](https://blogimg.goo.ne.jp/user_image/74/f8/4c92568b05b542c5adef7ac20a148706.png)
ってことを言ってます。
記事のトピックが非同期処理なので、プログレスバーについては説明しておりませんでした。
これからは、もう少し親切な記事が書けるよう努力してみます。