2

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

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

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

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

  • 如果调用不成功,返回值是多少?无效的?一些我不能使用的任意指针?
  • 如何访问ErrSilverlight 中的对象?
  • 如何检测呼叫是否成功?可能有任何我必须抓住的例外吗?
  • 我已经看到了一些使用该using语句的示例,而有些则没有。使用动态对象后是否必须手动处理它们?
4

1 回答 1

1
  • 如果调用不成功,返回值是多少?无效的?一些我不能使用的任意指针?

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

  • 如何访问ErrSilverlight 中的对象?

这不是“Err”对象,而是一个 VB(脚本)构造,它在 C# 中不存在。COMException但是,当调用失败时,您所追求的信息将作为 throws 的属性提供。

  • 如何检测呼叫是否成功?可能有任何我必须抓住的例外吗?

是的,见上文。

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

使用 Dispose 管理 COM 对象生命周期的尝试具有不同的结果。就我个人而言,我会确保任何具有“关闭”方法之类的东西都具有“关闭”方法调用并将其保留在那里。

如果你真的想让用户 COM 对象被释放,那么在适当的时候(而不是太频繁地)调用GC.Collect.

于 2011-09-29T22:00:14.380 回答