我想在 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(脚本)构造,它在 C# 中不存在。然而,您之后的信息将作为调用失败时抛出的 COMException
的属性提供。
- 如何检测调用是否成功?是否有我必须捕获的异常?
是的,见上文。
- 我见过一些使用
using
语句的例子,还有一些没有。我是否必须在使用动态对象后手动处置它们?
使用 Dispose 管理 COM 对象生命周期的尝试有不同的结果。就我个人而言,我会确保任何具有“关闭”方法之类的东西都具有该“关闭”方法调用并将其保留在那里。
如果您真的想让用户 COM 对象被释放,那么在适当的时候(不要太频繁)调用 GC.Collect
。
关于c# - C# 中的 VBScript 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603506/