2010-05-24 20 views
17

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

मैं विभिन्न टाइमर विकल्पों के माध्यम से पढ़ रहा हूं और सोच रहा था कि कोई ऐसा करने का सबसे प्रभावी तरीका सुझा सकता है?

इसके अलावा, क्या ऑब्जेक्ट का उपयोग करने के बजाय पैरामीटर को दृढ़ता से टाइप करने का कोई तरीका है और फिर आईपर्सन में कनवर्ट करना है?

आपकी मदद के लिए धन्यवाद।

+0

बस सोच रहा है, लेकिन आप हर 20 सेकंड में एक व्यक्ति को क्यों संसाधित करेंगे जब आप प्रत्येक व्यक्ति को तत्काल प्राप्त कर सकते हैं जिसे आप प्राप्त करते हैं? – Juliet

+1

यह एक उदाहरण के रूप में किया गया था, शायद एक बेवकूफ एक :), वास्तव में, मुझे लगता है कि प्रत्येक एन सेकेंड में दृढ़ता से टाइप किए गए पैरामीटर के साथ एक विधि को कैसे कॉल करें। – CiaraM

उत्तर

4

मैं System.Threading.Timer के लिए जाऊंगा। ध्यान रखें कि विंडोज एक वास्तविक समय ओएस सिस्टम नहीं है, इसलिए समय पर कुछ भिन्नता होगी चाहे आप जो भी तंत्र चुनते हैं।

आपने यह नहीं कहा कि यह फ़ंक्शन किसी भी प्रकार के यूआई अपडेट कर रहा है, लेकिन अगर आपको यह भी पता होना चाहिए कि कॉलबैक फ़ंक्शन एक अलग थ्रेड पर निष्पादित किया जाएगा, तो कुछ मामलों में यूआई अपडेट करने की आवश्यकता होगी यूआई थ्रेड पर अनुरोध को मार्शल को उचित कार्रवाई करने के लिए।

अनुरोध वापस यूआई के लिए मार्शल थ्रेड आप निम्नलिखित

कर सकते हैं WinForms के लिए Control.Invoke

WPF के लिए आप Dispatcher.Invoke

या Async संस्करण BeginInvoke

23
उपयोग कर सकते हैं आप उपयोग कर सकते हैं करने के लिए

System.Threading.Timer आपको क्या चाहिए:

निर्दिष्ट अंतराल पर एक विधि निष्पादित करने के लिए एक तंत्र प्रदान करता है।

उस विधि को निर्दिष्ट करने के लिए टाइमरकॉलबैक प्रतिनिधि का उपयोग करें जिसे आप टाइमर निष्पादित करना चाहते हैं। टाइमर प्रतिनिधि निर्दिष्ट होता है जब टाइमर का निर्माण होता है, और बदला नहीं जा सकता है। विधि थ्रेड पर बनाए गए थ्रेड पर निष्पादित नहीं होती है; यह सिस्टम द्वारा आपूर्ति किए गए थ्रेडपूल थ्रेड पर निष्पादित करता है।

वहाँ भी System.Windows.Forms.Timer है:

एक टाइमर है कि उपयोगकर्ता परिभाषित अंतराल पर एक घटना को जन्म देती है लागू करता है। यह टाइमर विंडोज फॉर्म अनुप्रयोगों में उपयोग के लिए अनुकूलित है और विंडो में इस्तेमाल किया जाना चाहिए।

यह विंडोज टाइमर एक एकल थ्रेडेड वातावरण के लिए डिज़ाइन किया गया है जहां यूआई थ्रेड का उपयोग प्रसंस्करण करने के लिए किया जाता है।

और भूल नहीं है System.Timers.Timer:

टाइमर घटक एक सर्वर-आधारित घड़ी है, जो आप एक आवर्ती अंतराल, जिस पर बीत चुके घटना अपने आवेदन में उठाया है निर्दिष्ट करने के लिए अनुमति देता है।

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

तो प्रत्येक की जांच करें और यह तय करें कि आपके मामले में कौन सा सबसे अच्छा काम करता है।

+4

यदि वह Windows फॉर्म सिस्टम का उपयोग करता है। Windows.Forms.Timer एक बेहतर विकल्प है क्योंकि कॉलबैक UI थ्रेड पर होगा। –

+0

@ पीटर - इसके लिए धन्यवाद, मैंने दोनों को कवर करने के लिए उत्तर अपडेट किया है। – ChrisF

+0

एक सिस्टम है। टिमर्स। टिमर भी। शायद आप इसे पूर्णता के लिए अपने उत्तर में जोड़ सकते हैं? –

0

आप इसका उपयोग कर सकते हैं, बस यह सुनिश्चित कर लें कि आप जो भी कर रहे हैं वह थ्रेड सुरक्षित है।


using System.Threading; 

public void DoStuff(IPerson person) 
{ 
    new Timer(ProcessPerson, person, 0, 20000); 
} 

public void ProcessPerson(object threadState) 
{ 
    IPerson person = threadState as IPerson; 
    // do your stuff 
} 
+0

कम से कम [3 वर्ग] (http: // msdn.microsoft.com/en-us/magazine/cc164015.aspx) 'टाइमर' नामक .net फ्रेमवर्क में। आपको स्पष्ट करना चाहिए कि आप किसके बारे में बात कर रहे हैं। (मैं उस निर्माता से मानता हूं जिसे आप [System.Threading.Timer] (http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx) का जिक्र कर रहे हैं) –

+0

हां, मेरे पास होना चाहिए और स्पष्ट हो गया सिस्टम शामिल करने के लिए संपादित। नामकरण नामस्थान। इसके अलावा, बस ध्यान दें, मेरा समाधान गारंटी नहीं देता है कि प्रोसेसपर्सन को केवल 20 सेकंड कहा जाएगा, यह प्रोसेसपेसन को हर 20 सेकंड पर कॉल करेगा, भले ही अंतिम प्रोसेसपर्सन समाप्त हो या नहीं। – Adam

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