OS-Thread sensitive 対応

Win32 のライブラリには、OS のスレッドに対して敏感な API セットを提供するものがある。これにはウィンドウハンドルやデバイスコンテキストといったものを直接的・間接的に扱う場合や、スレッドローカルストーレジに依存したライブラリに良く見られる。
WinForms では上記のような場合には InvokeRequired プロパティを通じてスレッドの調停を要求するようになっています。*1 この手法では、コンシューマによってオブジェクトに対する操作を適切にマーシャリングすることを要求する方法であって、コンシューマにたいして正確な操作と知識を要求してしまいます。

*1:有名ですが、.NET 1.1 以前と .NET 2.0 では InvokeRequired プロパティを無視した場合の挙動が変化しているのにも注意しなければなりません。

続きを読む