Tôi đang cố gắng sử dụng ManagementEventWatcher trong một dịch vụ để theo dõi thời điểm máy tính vào và ra khỏi chế độ ngủ. Tôi mới vào .NET và C# vì vậy tôi đang đấu tranh khá một chút để đưa ra cú pháp để thực hiện công việc này.Làm cách nào để sử dụng ManagementEventWatcher để theo dõi tạm ngưng/tiếp tục?
Tôi đã tìm thấy blog post chi tiết cách anh ấy sử dụng ManagementEventWatcher để theo dõi trạng thái này, nhưng anh ấy đã không đăng toàn bộ mã của mình. Tôi đang cố gắng để đi qua và thực hiện một dịch vụ đơn giản mà tạo ra một tập tin log .txt nói rằng máy tính đã bị đình chỉ/tiếp tục nhưng đang chạy vào các vấn đề với các không gian tên và các loại.
Đây là đoạn mã vào file service.cs:
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;
namespace SleepNotifierService
{
public class WqlEventQuery : EventQuery { }
public partial class Service1 : ServiceBase
{
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()
{
}
public void Resume()
{
}
}
}
Một lần nữa, đây là lần đầu tiên mà tôi lập trình với .NET và C# vì vậy tôi xin lỗi vì sự thiếu hiểu biết của tôi.
Tôi nhận lỗi namespace như:
Loại hoặc namespace tên 'ManagementEventWatcher' không thể tìm thấy (là bạn thiếu một sử dụng chỉ thị hoặc tham khảo một hội?)
Xin cảm ơn,
Tomek
cảm ơn lời khuyên, bây giờ tôi nhận được một lỗi rằng WqlEventQuery "không chứa một hàm tạo có các đối số '1'". Tôi đã được tìm kiếm trực tuyến cho một số giải pháp và có vẻ như mọi người đã được sử dụng WqlEventQuery bằng cách đi qua một đối số. Tôi sẽ phải nghiên cứu thêm. – Tomek
Bạn có thể nhận được lỗi đó vì dòng mã sau đây: lớp công khai WqlEventQuery: EventQuery {} dòng đó về cơ bản xác định lại lớp WqlEventQuery. Và vì bạn không có bất kỳ hàm tạo nào được định nghĩa cho lớp này, hàm tạo mặc định sẽ được sử dụng. – user258808