2009-03-16 11 views
19

मुझे एक विंडोज़ सेवा मिली है जो परिवर्तन के लिए प्रत्येक एन सेकंड फ़ोल्डर को स्कैन करता है। मुझे यह शुरू करने की कोशिश करते समय "सेवा समय-समय पर स्टार्ट कमांड का जवाब नहीं दे रहा"।विंडोज सेवाएं: ऑनस्टार्ट पाश - क्या मुझे प्रतिनिधिमंडल की आवश्यकता है?

public void OnStart(string[] args) 
{ 
    while (!_shouldExit) 
    { 
     //Do Stuff 

     //Repeat 
     Thread.Sleep(_scanIntervalMillis); 
    } 
} 

यह है कि क्या त्रुटि पैदा है:

मैं एक पाश तो जैसे onStart में दूर सेटिंग मिल गया है? क्या मुझे इस विधि का प्रतिनिधि होना चाहिए?

उत्तर

39

ऑनस्टार्ट केवल कार्य शुरू करना चाहिए; यह करने के लिए यह ज़िम्मेदार नहीं है। यह आम तौर पर वास्तविक काम करने के लिए एक नया धागा पैदा करने का मतलब है। यह उम्मीद की जाती है कि ऑनस्टार्ट तुरंत पूरा हो जाए। उदाहरण के लिए:

public void OnStart(string[] args) // should this be override? 
    { 
     var worker = new Thread(DoWork); 
     worker.Name = "MyWorker"; 
     worker.IsBackground = false; 
     worker.Start(); 
    } 
    void DoWork() 
    { 
     // do long-running stuff 
    } 
+0

सेवा समाप्त होने पर धागे का क्या होता है? – JSideris

+0

@ बिज़ोरके यदि आपका मतलब अचानक समाप्त हो गया है: यह किसी भी प्रक्रिया को समाप्त करने के समान ही मध्य प्रवाह को मार डाला जाता है। यदि आपका मतलब "रुक गया" है, तो: जो भी आपका कोड –

+0

@MarcGravell करने के लिए कहता है, क्या कोई विशिष्ट कार्य है। क्या बैकग्राउंड झूठा है? इस प्रकार धागा एक अग्रभूमि धागा है? – Thomas

6

ऑनस्टार्ट विधि को अवरुद्ध नहीं करना चाहिए। आपको एक कार्यकर्ता थ्रेड तैयार करना होगा जो नौकरी करेगा। फ़ाइल सिस्टम परिवर्तन अधिसूचनाओं को स्कैन करने के लिए आप FileSystemWatcher कक्षा को भी देख सकते हैं।

संबंधित मुद्दे