「基礎となるRCWから分離されたCOMオブジェクトは使用できません」というエラーの問題を修正しようとしています.COMオブジェクトがインスタンス化されていないスレッドで使用されていることが原因だと思います.
私は多くのリファクタリングを行うことを許可されていません。オブジェクトは複数のスレッドで使用できる必要があるため、前述のエラーを引き起こす何かを行う前に、現在のスレッドでオブジェクトが作成されているかどうかを確認する方法があるかどうか疑問に思います。まだ作成していない場合は作成します。
また、私はこの相互運用のことは初めてなので、誰かが私を理解するのに十分親切であれば、私はそれを大いに感謝します:
スレッドが終了すると、COM オブジェクトはどうなりますか? また、もう一方のスレッドに COM オブジェクトがなくても RCW を使用できるのはなぜですか (なぜ null ではないのですか?)。また、なぜそのエラーが発生し、同時に Marshal.IsCOMObject で true を返すのでしょうか?
参照カウント、ラッパー、およびメモリを使用した次のシナリオで何が起こるか:
- スレッド A に COM オブジェクト x を作成する
- それを渡し、スレッド B に保存します
- スレッド C に別の x を作成します (または、y の場合はどうなるでしょうか?)
- それを渡し、スレッド B に x を上書きします