Windows Workflow How to deadlock your UI thread

Windows Workflow How to deadlock your UI thread

ReplicatorActivity の話と思いきや、この記事のキモはスレッドの扱いによって deadlock 起こすよのところ。

Windows Workflow Step by Step 本でも Windows Forms とのやりとりのところで
いきなりdelegate作って Invoke を使って自分を呼び出したりなどしていた。
Windows Forms じゃない場合は SynchronizationContext.Post を使う、らしい。
(というか Windows.Forms.Control.Invoke が裏では SynchronizationContext.Current.Post を呼んでいるだけと思われる)

上記記事で問題発生したのは TraceLister を登録しようとしたら、
そこは Windows Forms のコンテキストでないので Invoke が使えなかった、という。

SynchronizationContext のヒミツについてはソースコード以外何も語っていないが
<URL:http://data.blogdns.net/blog/2006/11/synchronizationcontext.html>
を見てどういうことかわかってきた気がする。

.NET Framework 2.0 でのマルチスレッドプログラミングは BackgroundWorker 使えだったけど、
3.0 では WF 使えがいいと思うようになってきた。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。