我想在Silverlight OOB应用程序中使用AutomationFactory访问WMI。

dynamic locator = AutomationFactory.CreateObject("WbemScripting.SWbemLocator");
dynamic wmi = locator.ConnectServer(".", "\\root\\cimv2");


我现在想为此添加错误处理。

MSDN指出,如果调用成功,则返回值是对连接对象的引用,并且在发生错误的情况下,我应该检查Err对象。但是,我对此有两个问题:


如果呼叫失败,返回值是多少?空值?我不能使用一些任意指针?
如何在Silverlight中访问Err对象?
如何检测通话是否成功?我是否有任何例外需要抓住?
我看过一些使用using语句的示例,有些则没有。使用动态对象后,是否必须手动处理它们?

最佳答案

如果呼叫失败,返回值是多少?空值?我不能使用一些任意指针?


当对COM组件的调用失败时,不会返回任何值,并且分配的LHS不会被修改。而是抛出COMException


如何在Silverlight中访问Err对象?


这不是“ Err”对象,而是VB(Script)构造,在C#中不存在。但是,您所需要的信息将作为呼叫失败时抛出的COMException的属性可用。


如何检测通话是否成功?我是否有任何例外需要抓住?


是的,请参见上文。


我看过一些使用using语句的示例,有些则没有。使用动态对象后,是否必须手动处理它们?


尝试使用Dispose管理COM对象生存期的结果多种多样。就个人而言,我将确保具有“ Close”方法之类的任何东西都具有“ Close”方法调用并将其留在那。

如果确实要释放用户COM对象,则在适当的时候(而不是太频繁)调用GC.Collect

10-08 10:50
查看更多