2009-06-09 8 views
9

कोई नई घटना बनने पर कोई घटना होती है। मैं एक सी # अनुप्रयोग लिख रहा हूं जो कुछ प्रक्रियाओं के लिए जांच करता है, लेकिन मैं लगातार सभी ज्ञात प्रक्रियाओं के माध्यम से एक अनंत लूप लिखना नहीं चाहता हूं। इसके बजाय, मैं किसी भी घटना द्वारा ट्रिगर की गई सभी मौजूदा प्रक्रियाओं के माध्यम से बनाई गई या पुनरावृत्ति की प्रत्येक प्रक्रिया की जांच करता हूं। कोई सुझाव?प्रक्रियाओं के निर्माण के दौरान कोई सिस्टम इवेंट है?

 Process[] pArray; 
     while (true) 
     { 
      pArray = Process.GetProcesses(); 

      foreach (Process p in pArray) 
      { 
       foreach (String pName in listOfProcesses) //just a list of process names to search for 
       { 

        if (pName.Equals(p.ProcessName, StringComparison.CurrentCultureIgnoreCase)) 
        { 
         //do some stuff 

        } 
       } 
      } 

      Thread.Sleep(refreshRate * 1000); 
     } 

उत्तर

12

डब्लूएमआई आपको प्रक्रिया निर्माण (और लगभग दस लाख अन्य चीजों) सुनने के साधन प्रदान करता है। my answer here देखें।

void WaitForProcess() 
{ 
    ManagementEventWatcher startWatch = new ManagementEventWatcher(
     new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace")); 
    startWatch.EventArrived 
         += new EventArrivedEventHandler(startWatch_EventArrived); 
    startWatch.Start(); 
} 

static void startWatch_EventArrived(object sender, EventArrivedEventArgs e) 
{ 
    Console.WriteLine("Process started: {0}" 
         , e.NewEvent.Properties["ProcessName"].Value); 
    if (this is the process I'm interested in) 
    { 
      startWatch.Stop(); 
    } 
} 
संबंधित मुद्दे