आवेदन का मुख्य धागा कुछ काम कर रहा है।सी # async कॉल विधि समय-समय पर
एक टाइमर भी मौजूद है, जिसमें हर 10 मिनट में कुछ विधि को कॉल करना चाहिए जो असीमित चलाना चाहिए।
क्या आप कृपया मुझे एक अच्छा उदाहरण दे सकते हैं कि इसे व्यवस्थित कैसे किया जाए?
आवेदन का मुख्य धागा कुछ काम कर रहा है।सी # async कॉल विधि समय-समय पर
एक टाइमर भी मौजूद है, जिसमें हर 10 मिनट में कुछ विधि को कॉल करना चाहिए जो असीमित चलाना चाहिए।
क्या आप कृपया मुझे एक अच्छा उदाहरण दे सकते हैं कि इसे व्यवस्थित कैसे किया जाए?
मैं लूप और नींद के साथ एक स्पष्ट धागे का उपयोग करने की अनुशंसा नहीं करता। यह बुरा अभ्यास और बदसूरत है। इस उद्देश्य के लिए टाइमर कक्षाएं हैं:
यदि यह एक जीयूआई ऐप नहीं है, तो आप समय-समय पर एक अलग थ्रेड पर कोड निष्पादित करने के लिए System.Threading.Timer का उपयोग कर सकते हैं।
यदि यह WinForms/WPF ऐप क्रमशः System.Windows.Forms.Timer और System.Windows.Threading.DispatcherTimer पर एक नज़र डालें। ये आसान हैं क्योंकि वे GUI थ्रेड पर अपना कोड निष्पादित करते हैं, इस प्रकार स्पष्ट Invoke
कॉल की आवश्यकता नहीं होती है।
लिंक में प्रत्येक के लिए उदाहरण भी शामिल हैं।
बस एक जिज्ञासा, यदि ये टाइमर जीयूआई थ्रेड पर निष्पादित करते हैं तो वे मुख्य अनुप्रयोग को अवरुद्ध करेंगे, निश्चित रूप से एक अलग धागा एसिंक्रोनस आवश्यकता के लिए बेहतर है? मैं इस बात से सहमत हूं कि निष्पादन के लिए पूरे धागे को जीवित रखना हर 10 मिनट आदर्श नहीं है। – Vok
@ वोक: यह निर्भर करता है कि आपको क्या करना है। ये टाइमर जीयूआई के त्वरित आवधिक अद्यतन के लिए अच्छे हैं। यदि कोड अधिक लंबा चल रहा है, तो आपको केवल अद्यतन भाग के लिए 'System.Threading.Timer' का उपयोग' स्पष्ट 'आमंत्रण के साथ करना चाहिए। वैसे भी, विभिन्न स्थितियों के लिए उपलब्ध टूल्स को जानना अच्छा होता है। – Tudor
सबसे आसान तरीका एक कॉल करने के लिए सबसे आसान तरीका है जो कार्यों के बीच 10 मिनट तक सोता है। यह कुछ भी अवरुद्ध नहीं करता है क्योंकि यह किसी अन्य धागे में है।
.NET 4 में, आप Task
वर्ग के साथ ऐसा होगा:
Task t = Task.Factory.StartNew(() => { /* your code here */ });
// or
Task t = Task.Factory.StartNew(YourFunctionHere);
void YourFunction() {
while (someCondition) {
// do something
Thread.Sleep(TimeSpan.FromMinutes(10));
}
}
(इस कोड को परीक्षण नहीं किया गया)
एक BackgroundWorker धागा प्रयोग करें।
void FireTask()
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
//Your job
}
एक और धागा है कि एक पाश
पाश अंदर चलाता शुरू करें, 10 मिनट के लिए सो जाओ, फिर अपनी विधि को कॉल करें,
दोहराएं क्या यह एएसपी.नेट, रूप है, अन्य? –
क्या यह एक जीयूआई ऐप है? – Tudor
यह एक विंडोज़ सेवा है जो वास्तव में एक सर्वर है और हमेशा नए कनेक्शन सुनती है। तो जीयूआई नहीं है, लेकिन सर्वर के काम को रोका नहीं जाना चाहिए – Ksice