コードをテストしているときに、奇妙な動作に遭遇しました。
これ:
if (_sampGrabber != null)
{
Marshal.ReleaseComObject(_sampGrabber);
_sampGrabber = null;
}
_sampGrabber==null を生成しますが、その後
ReleaseIfNotNull(_sampGrabber);
_sampGrabber は、使用時に元の値を保持しています
public static int ReleaseIfNotNull(object comObject)
{
int hr = 0;
if (comObject != null)
{
hr = Marshal.ReleaseComObject(comObject);
comObject = null;
}
return hr;
}
_sampGrabber は、DirectShow SampleGrabber フィルター インターフェイスです。
この動作の説明に興味があります。Visual Studio Test Framework を使用してテストを作成しているときに、これに遭遇しました。