Содержит ли WqlEventQuery конструктор с 1 аргументом? - PullRequest
0 голосов
/ 28 января 2010

Я пытаюсь создать простой сервис на C # с использованием VS2008, который создает текстовый файл, когда компьютер переходит в спящий режим. Мой текущий код выдает следующую ошибку:

'SleepNotifierService.WqlEventQuery' не содержит конструктор, который принимает аргументы '1'

Теперь я посмотрел в браузере объектов, и похоже, что он принимает один аргумент. Вот что должен был сказать браузер:

public WqlEventQuery (строка queryOrEventClassName)

Вот мой код:

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 в целом, так что это может быть что-то тривиальное.

Ценю любую помощь,

Томек

1 Ответ

1 голос
/ 28 января 2010

Вы используете неправильно WqlEventQuery. Он определен в System.Management , и он действительно имеет конструктор с одним аргументом, но есть также ваш пользовательский WqlEventQuery класс.

Если вы хотите использовать класс .NET BCL, вам придется полностью его квалифицировать:

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

или даже префикс с ключевым словом global :

var query = new global::System.Management.WqlEventQuery("Win32_PowerManagementEvent");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...