2010-01-27 29 views
8

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

Trả lời

6

Bạn cần có không gian tên System.Management, được bao gồm trong mẫu mã do bạn cung cấp. Tôi tin rằng bạn cần tham khảo thư viện System.Management trong cài đặt dự án của bạn. Thực hiện theo các bước sau để thực hiện việc này (Tôi giả sử bạn đang kiện Visual Studio):

Đi tới Solution Explorer và mở rộng dự án của bạn, nhấp chuột phải vào tùy chọn/thư mục Tham khảo và chọn Thêm tài liệu tham khảo từ trình đơn ngữ cảnh. Bây giờ chọn tab .Net và chọn System.Management từ danh sách và nhấn OK.

+0

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

+0

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

Các vấn đề liên quan