【问题标题】:Does WqlEventQuery contain a constructor with 1 argument?WqlEventQuery 是否包含带有 1 个参数的构造函数?
【发布时间】:2010-01-29 02:41:07
【问题描述】:

我正在尝试使用 VS2008 在 C# 中创建一个简单的服务,该服务会在计算机进入睡眠模式时创建一个文本文件。我当前的代码抛出以下错误:

“SleepNotifierService.WqlEventQuery”不包含采用“1”参数的构造函数

现在我查看了对象浏览器,看起来它确实接受了一个参数。这是浏览器必须说的:

公共 WqlEventQuery(字符串查询或事件类名)

这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Management;
using System.IO;

namespace SleepNotifierService
{
    public class WqlEventQuery : EventQuery { }

    public partial class Service1 : ServiceBase
    {
        ManagementEventWatcher _watcher;

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            WqlEventQuery query = new WqlEventQuery("Win32_PowerManagementEvent");
            _watcher = new ManagementEventWatcher(query);
            _watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
            _watcher.Start();
        }

        protected override void OnStop()
        {
            _watcher.Stop();
        }

        void watcher_EventArrived(object sender, EventArrivedEventArgs e)
        {
            try
            {
                int eventType = Convert.ToInt32(e.NewEvent.Properties["EventType"].Value);
                switch (eventType)
                {
                    case 4:
                        Sleep();
                        break;
                    case 7:
                        Resume();
                        break;
                }
            }
            catch (Exception ex)
            {
                //Log(ex.Message);
            }
        }

        public void Sleep()
        {
            StreamWriter SW;
            SW = File.CreateText("c:\\MyTextFile.txt");
            SW.WriteLine("Sleep mode initiated");
            SW.Close();
        }

        public void Resume()
        {
        }

    }
}

我对那个对象浏览器的解释有误吗?一般来说,我是创建服务和 C#/.NET 的新手,所以这可能是微不足道的。

感谢任何帮助,

托梅克

【问题讨论】:

    标签: c# .net service


    【解决方案1】:

    您使用了错误的WqlEventQuery。在System.Management 中定义了一个,它确实有一个单参数构造函数,但还有您的自定义 WqlEventQuery 类。

    如果你想使用 .NET BCL 的类,你必须完全限定它:

    var query = new System.Management.WqlEventQuery("Win32_PowerManagementEvent");
    

    甚至在它前面加上global关键字:

    var query = new global::System.Management.WqlEventQuery("Win32_PowerManagementEvent");
    

    【讨论】:

    • 好电话 8)。为什么在声明查询变量时使用 var 关键字?
    • @Tomek 为什么不呢?也节省了一些输入
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2013-02-17
    相关资源
    最近更新 更多