WPFxUPnP 2 その1a

その1の補足。
COMは利用した分だけ、IUnknownのReleaseを実行し、参照カウンタを解放する必要があります。(利用する際には、IUnknownのAddRef)
C#からCOMの呼び出しは、ランタイム呼び出し可能ラッパー (RCW: Runtime Callable Wrapper)ってのが、仲立ちをしてくれてます。

RCWについては、http://msdn.microsoft.com/ja-jp/library/8bwh56xe.aspxを参照。

このRCWがスレッドで、利用した分だけ解放していないと、親切にスレッド終了にDisconnectedContext例外を発生させて、解放漏れてない?って、教えてくれるわけ。
まぁ、スレッドを超えて利用したいオブジェクトの場合には、ありがた迷惑なんですが。

ちなみに、COMオブジェクトは、参照カウンタが残っていると生存し続けますので、メモリを消費します。
なお、破棄はオブジェクト自身が参照カウンタが0になった時点で解放するお約束です。