C# での開発中に、この問題に何度か遭遇しました。私は喜んでコーディングを行い、オブジェクトをスレッド間で行ったり来たりさせたりしていると、突然、おなじみのエラーが発生します。
「別のスレッドが所有しているため、呼び出しスレッドはこのオブジェクトにアクセスできません。」
そうですね、特に GUI スレッド上のオブジェクトについては、以前に扱ったことがあります。その特定の問題に対処するためのプログラムを作成するために、追加のコードを作成する必要があります。しかし、どうしても普通のオブジェクトに出くわすたびに、それは別のスレッドからアクセスされるのが好きではありません。
編集アクセス例外を引き起こしたオブジェクトに関する元の投稿で、私は間違っていました。IPAddressではなく、System.Printing.PrintQueueでした。IPアドレスを取得するために使用していました。これは、複数のスレッドから評価できないオブジェクトです。
私が書いたすべてのクラスには、この問題はありません。これを自分で実装する方法さえわかりません。自分を作成したスレッド ID を持つメンバー変数を保持し、プロパティとメソッドにアクセスするたびに現在のスレッドを確認する必要がありますか? それはクレイジーに思えます。Microsoft がそう判断した理由は ..... 「わかりました... PrintQueue は、スレッド間で共有できません。しかし、これらの他のクラスは....準備ができています。」
一部のオブジェクトが複数のスレッド アクセスからブロックされるのはなぜですか?