WIN1@Codename

Codename

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

BackgroundWorker の覚書

これまでマルチスレッド処理、非同期処理をVBで実現するには結構面倒な処理が必要でしたが、BackgroundWorker を使用することで簡単に実現できるようになりました。

Windows フォーム コントロールのスレッド セーフな呼び出し方にすこしコツがいるので以下覚書です。

・方法1
BackgroundWorker の ProgressChanged イベント内でコントロールにアクセスする。
DoWork イベント内でアクセスするとエラーになるので、ReportProgress でイベントを発生させてからコントロールにアクセスする。

・方法2
DoWork などから呼び出すプロシージャ自体をスレッドセーフにする。
Delegate Sub TestCallback()
Sub TestWork()
   If Me.InvokeRequired Then
      Dim objTestCallback As New TestCallback(AddressOf TestWork)
      Me.Invoke(objTestCallback, New Object() {})
      Exit Sub
   End If
   Form1.Text = "Test"
End Sub

・方法3
アクセスしようとするコントロールの CheckForIllegalCrossThreadCalls プロパティーを False にする。
Form1.CheckForIllegalCrossThreadCalls = False

BackgroundWorker の意味が分からないとなんのこっちゃですが、
簡単になったというものの、ちょっとばかりコツがいるようなのでその覚書でした。

参考:
http://www.atmarkit.co.jp/fdotnet/vb2005/vb2005_04/vb2005_04_01.html
http://msdn.microsoft.com/ja-jp/library/cc708906.aspx

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://codename2010.blog11.fc2.com/tb.php/128-166f7efc
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。