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

わんくま同盟

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

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


(過去ログ 18 を表示中)
■6861 / )  Re[5]: Control.Invokeが使えない件。
□投稿者/ NyaRuRu (16回)-(2007/08/25(Sat) 05:12:56)
2007/08/25(Sat) 05:24:22 編集(投稿者)

No6858 (れい さん) に返信
> Appication.Runで何か特殊なことをやってるかもしれませんが…。
> メインスレッドからサブスレッドのFormにInvokeしても、
> サブスレッドからメインスレッドのFormにInvokeしても同じでしたから、
> まぁあんまり関係ないかと思ってるんですが。
> Application.Runが影響してるんだとするとかなり醜い実装ですねぇ。

いや,PostMessage ってことならなおさら Win32 のメッセージ通信なわけで,DispatchMessage がいつどこでどのように起きるかは意識しないとまずいでしょう.
その辺をすっとばして,コントロールの寿命のみに注目して再現条件を考えて良いのかどうか,私にはまだよく分かりません.(まあこれは私が GUI アプリをそんなに作らないからですが)
.NET のプログラミングモデル上は「メインスレッドからサブスレッドのFormにInvoke」しているように見えても,実際のメッセージキューはスレッドごとにしか存在せず,従ってこれはフォーム間通信ではなくてスレッド間通信だと考えるのが妥当だと思います.

なお,WPF の資料ですが,
http://msdn2.microsoft.com/ja-jp/library/ms741870(vs.80).aspx#stumbling_points
の「再入およびロック」のところでも解説されているように,GUI アプリケーションではかなり広範囲に Win32 メッセージの影響を考えないといけないので,出発点からして「綺麗」とはほど遠い状況です.
返信 編集キー/


管理者用

- Child Tree -