मुझे लगता है कि आपका कोड विंडोज फॉर्म से संबंधित है।
यदि आप UI थ्रेड में अतुल्यकालिक रूप से निष्पादित करने की आवश्यकता है तो आपको BeginInvoke
पर कॉल करें: अधिकांश मामलों में नियंत्रण की गुण बदलें।
काफी हद तक यह कुछ प्रक्रियाओं में प्रतिनिधि को पारित किया जा रहा है जिसे आवधिक रूप से निष्पादित किया जा रहा है। (संदेश लूप प्रसंस्करण और उस तरह की चीजें)
यदि BeginInvoke
Delegate
के लिए कॉल किया गया है तो प्रतिनिधि को केवल असंकालिक रूप से बुलाया जाता है।
(Invoke
सिंक संस्करण के लिए।)
आप अधिक सार्वभौमिक कोड जो WPF और WinForms आपको कार्य समानांतर लाइब्रेरी विचार कर सकते हैं और अनुसार context साथ Task
चलाने के लिए पूरी तरह से काम करता है चाहते हैं। (TaskScheduler.FromCurrentSynchronizationContext()
)
और दूसरों द्वारा पहले से ही कहने के लिए थोड़ा जोड़ने के लिए: लैम्बडास को या तो अनाम विधियों या expressions के रूप में माना जा सकता है।
और यही कारण है कि आप लैम्बडास के साथ var
का उपयोग नहीं कर सकते हैं: कंपाइलर को एक संकेत की आवश्यकता है।
अद्यतन:
इस नेट v4.0 और उच्च
// This line must be called in UI thread to get correct scheduler
var scheduler = System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext();
// this can be called anywhere
var task = new System.Threading.Tasks.Task(() => someformobj.listBox1.SelectedIndex = 0);
// also can be called anywhere. Task will be scheduled for execution.
// And *IF I'm not mistaken* can be (or even will be executed synchronously)
// if this call is made from GUI thread. (to be checked)
task.Start(scheduler);
की आवश्यकता है कि आप अन्य धागे से काम करना शुरू कर दिया और उसके completition task.Wait()
के लिए प्रतीक्षा करने तक धागा बुला अवरुद्ध कर देगा की जरूरत है कार्य का अंत
कार्यों here कार्यों के बारे में और पढ़ें।
स्रोत
2013-01-17 21:15:13
एक पोस्ट में इतने सारे अलग-अलग प्रश्न ... - कम से कम 3 अलग-अलग प्रश्न होना चाहिए – Prokurors
इस आलेख को भी देखें http://mark-dot-net.blogspot.com.uy/2014/07 /six-ways-to-initiate-tasks-on-another.html –