gpt4 book ai didi

c# - ReleaseComObject 在静态方法中不起作用

转载 作者:行者123 更新时间:2023-11-30 20:57:10 27 4
gpt4 key购买 nike

在测试我的代码时,我遇到了一个我觉得很奇怪的行为。

这个:

if (_sampGrabber != null)
{
Marshal.ReleaseComObject(_sampGrabber);
_sampGrabber = null;
}

yields _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 过滤器接口(interface)。

我对这种行为的解释很感兴趣。我在使用 Visual Studio 测试框架编写测试时遇到过它。

最佳答案

如果您需要更改引用,则需要像这样更改签名:

public static int ReleaseIfNotNull(ref object comObject)

ReleaseIfNotNull 中更改对 comObject 的本地引用只会影响它自己的(堆栈)副本,不会影响对它的任何其他引用。 MSDN ref and out

关于c# - ReleaseComObject 在静态方法中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17041353/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com