无法从方法中 return ManagementObjectCollection
Can't return ManagementObjectCollection from method
所以我有一个从 ServerConnectionTools class 调用的方法。它应该 return ManagementObjects 的集合,但是,如果我们尝试查询的服务器无法访问,它会抛出 COMException。
我尝试将连接放置在 try/catch 内的范围内,但这意味着如果在分配之前失败,我的 ret 值将不会被设置。
处理此问题的最佳方法是什么?到目前为止,我一直在努力使功能正常工作,而不是专注于错误处理,所以我仍在学习中!
我也不知道我是否应该在 COMException 中引发一个事件来通知调用 class 连接失败,或者以其他方式处理它...我想捕获一个 COMException在调用 class 会是错误的做法吗?
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;
}
欢迎任何想法!
干杯
戴夫
Keep declaration of ret
outside the try
block, so that the
function it will get it's accessibility. now it belongs to the try
block only.
因此您的方法签名将如下所示:
public ManagementObjectCollection GetServicesList()
{
ManagementObjectCollection ret=new ManagementObjectCollection(); //declaration of the collection
try
{
this.Scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Service WHERE Caption LIKE 'xxx%'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(this.Scope, query);
ret = searcher.Get();
}
catch (COMException ex)
{
ServerConnectionFailure?.Invoke(this, null);
}
return ret;
}
所以我有一个从 ServerConnectionTools class 调用的方法。它应该 return ManagementObjects 的集合,但是,如果我们尝试查询的服务器无法访问,它会抛出 COMException。
我尝试将连接放置在 try/catch 内的范围内,但这意味着如果在分配之前失败,我的 ret 值将不会被设置。
处理此问题的最佳方法是什么?到目前为止,我一直在努力使功能正常工作,而不是专注于错误处理,所以我仍在学习中!
我也不知道我是否应该在 COMException 中引发一个事件来通知调用 class 连接失败,或者以其他方式处理它...我想捕获一个 COMException在调用 class 会是错误的做法吗?
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;
}
欢迎任何想法!
干杯 戴夫
Keep declaration of
ret
outside thetry
block, so that the function it will get it's accessibility. now it belongs to thetry
block only.
因此您的方法签名将如下所示:
public ManagementObjectCollection GetServicesList()
{
ManagementObjectCollection ret=new ManagementObjectCollection(); //declaration of the collection
try
{
this.Scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Service WHERE Caption LIKE 'xxx%'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(this.Scope, query);
ret = searcher.Get();
}
catch (COMException ex)
{
ServerConnectionFailure?.Invoke(this, null);
}
return ret;
}