あなたが呼び出し元で、メソッドを呼び出したり、コントロールを操作したりするときは、UI スレッド (またはそのコントロールを所有するスレッド) を呼び出す必要があることを私は知っています。
ただし、イベントの 1 つを介してコントロールによってコールバックされる場合、正しいスレッドでコールされていると想定しても安全でしょうか?
コモン コントロールに関する私の経験では、これは常に当てはまりますが、それはおそらく、ほとんどのイベントがユーザー インタラクションの結果であるためです。したがって、Windows メッセージは UI スレッドのメイン メッセージ ループによって処理されます。
最近、ユーザー インタラクション以外の理由でイベントを呼び出す独自のカスタム コントロールの 1 つに問題があり、バックグラウンド スレッドで発生することもあります。あるケースでは、イベントのイベント ハンドラーが別のコントロールを操作しようとしたため、不正なクロススレッド呼び出し例外が生成されました。
イベントハンドラーで呼び出しが必要かどうかを確認することで問題を解決できますが、実際に誰が「過ちを犯している」のか知りたいです。
コントロールのイベントやベスト プラクティスに関する「ルール」を記述しているドキュメントはどこにもありません。誰か知っていますか?または、あなたの意見では、適切なスレッドでサブスクライバーを呼び出すのはコントロールの責任ですか、それともサブスクライバーの責任でチェックする必要がありますか?
編集: 文書化された規則について誰も聞いたことがないようControl
ですが、消費者を驚かせないために、コントロールの所有スレッドの派生クラスでパブリック イベントを呼び出すことをお勧めします。