[英]ReleaseComObject does not work in static method
在測試代碼時,我遇到了一種奇怪的行為。
這個:
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測試框架編寫測試時,我碰到了它。
如果需要更改引用,則需要更改簽名,如下所示:
public static int ReleaseIfNotNull(ref object comObject)
在comObject
內部ReleaseIfNotNull
的本地引用更改為僅影響其自己的(堆棧)副本,而不影響對其的任何其他引用。 MSDN上的ref
和out
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.