无法从方法中 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;
    }