【发布时间】:2015-12-14 00:11:16
【问题描述】:
所以我有一个从 ServerConnectionTools 类调用的方法。它应该返回一个 ManagementObjects 的集合,但是,如果我们尝试查询的服务器不可访问,它会抛出一个 COMException。
我尝试将 Connection 放置在 try/catch 中,但这意味着如果在分配之前失败,则不会设置我的 ret 值。
处理此问题的最佳方法是什么?到目前为止,我一直在尝试让功能正常工作,而不是专注于错误处理,所以我仍在学习绳索!
我也不知道我是否应该在 COMException 中引发一个事件来通知调用类连接失败,或者以其他方式处理它......我认为在调用类中捕获一个 COMException 将是错误的方法?
public ManagementObjectCollection GetServicesList()
{
try
{
// Connect our scope to the actual WMI scope
this.Scope.Connect();
// Query system for Eclipse Services
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Service WHERE Caption LIKE 'xxx%'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(this.Scope, query);
ManagementObjectCollection ret = searcher.Get();
}
catch (COMException ex)
{
ServerConnectionFailure?.Invoke(this, null);
}
return ret;
}
欢迎提出任何想法!
干杯 戴夫
【问题讨论】:
-
如果你不想在调用类中捕获 COMException,你可以在 catch(COMexception ex) 块中抛出任何你喜欢的异常。