2009-06-03 12 views
5

हाय मैं एक नेट आवेदन के विकास कर रहा हूँ से फार्म और मैं निम्नलिखित हासिल करना चाहते हैं:एक खिड़कियों कॉलिंग एक और धागा (नेट)

मैं एक WinForms आवेदन, और एक टाइमर है (System.Timers.timer) जो एक शेड्यूल के आधार पर एक थ्रेड excecutes। समस्या यह है कि मैं माध्यमिक थ्रेड (वर्कर थ्रेड) से यूआई (विंडोज़ फॉर्म) तक नहीं पहुंच सकता, त्रुटि यह कहती है कि घटक की तरह कुछ ऐसा नहीं किया जा सकता है जो इसे बनाने वाले थ्रेड से नहीं पहुंचा जा सके।

क्या यह हासिल करने का कोई तरीका है?

धन्यवाद!

OnTimerElapsed(object sender, ElapsedEventArgs e) 
{ 
    args = GetArgs(); 
    this.BeginInvoke(() => DoWork(args)); 
    // 'this' refers to form here. 
    // You can also use BeginInvoke on a user control for updating it. 
} 

यह चलेंगे:

उत्तर

10
formObject.Invoke(delegate { 
     // action to perform on UI thread 
}); 
+2

और ध्यान दें कि यह काम मूल रूप से यूआई थ्रेड के लिए एक कार्य कतार में जोड़ा जाता है जो अंततः इसे समय पर निष्पादित करेगा। –

2

मान लें कि आपका कार्यकर्ता विधि (है कि आप एक सूत्र में निष्पादित)

DoWork(args) 
{ 
    ... 
    UpdateUI(); 
} 

विधि संभालती है कि टाइमर के बीत चुके घटना इस करना चाहिए है चलो एक अलग थ्रेड में DoWork और DoWork में यूआई अपडेट करने की क्षमता होगी।

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