2012-07-24 16 views
5
string connectionstring = "server =SQLVS2\\SQLVS2;database=DDM;Persist Security Info=True;uid=ddmuser;password=User02+Ddm;"; 
    SqlConnection myConnection = new SqlConnection(connectionstring); 
    SqlCommand myCommand = new SqlCommand("GetNullHash", myConnection); 
    myCommand.CommandType = CommandType.StoredProcedure; 
    myConnection.Open(); 
    SqlDataReader rdr = myCommand.ExecuteReader(); 

    while (rdr.Read()) 
    { 
     string filename = @"\\" + rdr.GetString(3); 
     filename = System.IO.Path.Combine(filename, rdr.GetString(2)); 
     filename = System.IO.Path.Combine(filename, rdr.GetString(1)); 
     computeHashh1 abc = new computeHashh1(); 
     Console.WriteLine(abc.computeHash(filename));   
     inserthash insert = new inserthash(); 
     insert.InsertHash(rdr.GetString(1), abc.computeHash(filename), rdr.GetStr(2),rdr.GetString(3)); 

    } 

के साथ एक अनंत लूप कैसे बना सकता हूं मैं इस लूप को 5 सेकेंड में कभी-कभी या बंद होने तक कैसे चला सकता हूं।मैं 5 सेकंड पॉज़

उत्तर

12

सरलतम विधि होगा:

while (true) { 
    // code here 
    Thread.Sleep(5000); 
} 

हालाँकि, और अधिक मजबूती के लिए, मैं एक windows service एक proper timer साथ की सिफारिश करेंगे।

+0

विंडोज सेवा में उचित टाइमर कैसे लिखना है? मैं वास्तव में इसमें विंडोज़ सेवा का उपयोग कर रहा हूं लेकिन टाइमर नहीं है – tipi

+0

मेरे पास 'उचित टाइमर' पर मौजूद लिंक पर एक नज़र डालें। – mellamokb

+0

आप इसे कैसे रोक सकते हैं? सेवा को रोककर –

4

प्रयास करें:

while(true) 
{ 
    try 
    { 
     thread.sleep(5000) 
    } 
    catch(Exception e) 
    { 
     //handle the exception 
    } 
} 

सबसे सरल इसकी।

+0

अहह ने इसे पीटा – Nathaniel

+0

टाइमर एक बेहतर दृष्टिकोण क्यों है? –

+0

इसे देखें - एक अच्छा स्पष्टीकरण है http://stackoverflow.com/questions/391621/compare-using-thread-sleep-and-timer-for-delayed-execution – Nathaniel

5

मैं अपने कोड लपेट और एक टाइमर वस्तु जो आप टाइमर पर ही नियंत्रण करने की अनुमति देगा का प्रयोग करेंगे

http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.100%29.aspx

+0

किसी को अनंत लूप के लिए टाइमर को रोकने/शुरू करने की आवश्यकता क्यों होगी? –

+0

ओपी: मैं इस लूप को 5 सेकंड में एक बार या बंद होने तक कैसे चला सकता हूं। –

+0

'हमेशा के लिए 5 सेकंड' - सरल। 'या बंद होने तक' - काफी आसान: कार्य प्रबंधक/सेवाएं/सेवा बंद करो। –

0
पर (बंद करो, शुरू करते हैं, आदि)

System.Timers.Timer aTimer; 
aTimer = new System.Timers.Timer(); 
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
aTimer.Interval = 2000; 
aTimer.Enabled = true; 

private void OnTimedEvent(object source, ElapsedEventArgs e) 
{ 
    //your code 
} 

अधिक जानकारी

ठीक है, अगर मैं ऐसा करने जा रहा था, और अंतराल पर बाधाएं सटीक नहीं हैं, और मैं बेहद निश्चित रूप से यह सुनिश्चित करना चाहता हूं कि कई टाइमर घटनाएं कभी भी मेरे कोड को पुन: दर्ज नहीं कर पाएंगी यदि मेरे कोड ने कभी-कभी अंतराल से अधिक समय लिया, मैं बस नींद() लूप का उपयोग करें और बिना किसी बाहरी टाइमर के काम करने वाली चीज है जो कि जटिल आवश्यकता को सरलता में जोड़ती है।

एक जीयूआई थ्रेड के बाहर जो संदेशों को संसाधित करना चाहिए, (या मुख्य सेवा थ्रेड जो प्रारंभ/बंद आदि को संसाधित करना चाहिए), टाइमर अक्सर अनुचित, अजीब होते हैं, या यदि कोई अन्य थ्रेड/पूल टाइमर ईवेंट को उठाना है, तो बेकार संदर्भ स्विच।

वैसे भी Vista/W7 पर कोई समस्या नहीं है, जो किसी भी सेवा को रोकने के लिए सो रही है जो सो रहे हैं। ओएस को यह महसूस करने में लगभग 20 सेकंड लगते हैं कि, सेवा मुख्य थ्रेड ने स्टॉप संदेश को संभाला है, फिर भी सेवा प्रक्रिया ने धागे को अवरुद्ध कर दिया है - फिर भी यह सेवा प्रक्रिया को समाप्त कर देता है, किसी भी नींद/दौड़/प्रतीक्षा/जो भी धागे को मारता है ।