2010-01-28 4 views
0

J'essaie de créer un service simple en C# en utilisant VS2008 qui crée un fichier texte lorsque l'ordinateur passe en mode veille. Mon code actuel jette l'erreur suivante:WqlEventQuery contient-il un constructeur avec 1 argument?

'SleepNotifierService.WqlEventQuery' does not contain a constructor that takes '1' arguments

Maintenant, je regardais dans le navigateur d'objets, et il semble que ça ne prend en un seul argument. C'est ce que le navigateur avait à dire:

public WqlEventQuery(string queryOrEventClassName)

Voici mon code:

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() 
     { 
     } 

    } 
} 

que j'interprète le navigateur d'objets mal? Je suis nouveau à la création de services et C# /. NET en général, donc ce pourrait être quelque chose de trivial.

apprécierais toute aide,

Tomek

Répondre

1

Vous utilisez mal WqlEventQuery. Il y en a un défini en System.Management et il a en effet un constructeur à un argument, mais il y a aussi votre classe personnaliséeWqlEventQuery.

Si vous souhaitez utiliser la classe de .NET BCL, vous devez vous qualifier pleinement:

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

ou préfixe même avec global mot-clé:

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

bon appel 8). Pourquoi utiliser le mot-clé var lors de la déclaration de cette variable de requête? – Tomek

+0

@Tomek Pourquoi pas? Enregistre aussi de la dactylographie –

Questions connexes