我正在尝试使用VS2008在C#中创建一个简单的服务,当计算机进入睡眠模式时会创建一个文本文件。我当前的代码抛出以下错误:
'SleepNotifierService.WqlEventQuery'不包含带有'1'参数的构造函数
现在我查看了Object浏览器,它看起来确实需要一个参数。这就是浏览器所说的:
public WqlEventQuery(string 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的新手,所以它可能是微不足道的。
感谢任何帮助,
托梅克
答案 0 :(得分: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");