VB.NET गुमनाम प्रतिनिधियों का समर्थन करता है, लेकिन केवल एकल बयान कार्यों के रूप में।
संदर्भ प्रदान करने के लिए (मल्टी बयान अनाम प्रक्रियाएं और अनाम Sub
रों .NET 4 में VB10 में जोड़ा गया है), DoEvents
यूआई और प्रक्रिया अन्य Windows संदेशों अद्यतन करने के लिए एक एकल पिरोया पर्यावरण अनुमति देने के लिए डिजाइन किया गया था, जबकि काम था किया जा रहा है। DoEvents
(या, जैसा कि आप यहां कर रहे हैं, प्रेषक पर "शून्य" फ़ंक्शन निष्पादित करके अप्रत्यक्ष रूप से ऐसा करने के लिए कोई लाभ नहीं होना चाहिए, क्योंकि यूआई थ्रेड स्वयं ही अपडेट हो रहा है।
अपने सवाल का जवाब देने के हित में है, हालांकि, सबसे आसान विकल्प कुछ इस तरह होगा:
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, _
New Action(Function() 7))
लेकिन, फिर से, मैं नहीं देख सकता कि यह वास्तव में हासिल करेगी।
यदि आप जो खोज रहे हैं वह यूआई थ्रेड पर कोड निष्पादित करना है (जैसे Control.Invoke
विंडोज रूपों से), तो Dispatcher.Invoke
(जो आप उपयोग कर रहे हैं) सही है, आपको बस बुद्धिमान कार्यों में अपनी इनलाइन अज्ञात विधियों का अनुवाद करें और उन प्रतिनिधियों के रूप में पास करें। कुछ हो सकते हैं कि आप अज्ञात के रूप में जाने से दूर हो सकते हैं। उदाहरण के लिए, अगर सभी आप कर रहे हैं एक प्रगति बार अपडेट कर रहा है, तो आप कर सकता है:
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, _
New Action(Function() progressBar.Value = 100))
यह काम करता है क्योंकि सभी कार्य है कि काम के बाईं ओर में जमा हो गया था मान। आप नहीं है, तथापि, सिर्फ एक उप इस तरह कह सकते हैं (निम्नलिखित संकलन नहीं होगा जब तक SomeFunctionName
रिटर्न एक मूल्य):
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, _
New Action(Function() SomeFunctionName(params)))
दूसरे शब्दों में, गुमनाम प्रतिनिधियों कि सी # कोड में है कि या तो कर रहे हैं के किसी भी (अर्थात यह एक समारोह नहीं एक पद्धति के लिए बस एक ही कॉल है)
तो फिर तुम हूँ
- एक से अधिक बयान
- कोई मान नहीं है ज: उन लोगों के लिए फ़ंक्शंस बनाने और उन कार्यों को प्रतिनिधियों को पास करने के बजाय, जो आपके पास सी # में कोड को रेखांकित करने के बजाय हैं।
DoEvents? मेरा मानना है कि वे VB6 में वापस DoEvents का उपयोग करते थे, इससे पहले कि लोगों को एहसास हुआ कि एप्लिकेशन केवल यूआई थ्रेड से अधिक हो सकता है। – Will
वैसे आधुनिक सम्मेलन थ्रेड स्लीप (1) या इसी तरह का उपयोग करना है, लेकिन यह काम नहीं करता है जब आपको अस्थायी रूप से थ्रेड से बाहर निकलने की आवश्यकता होती है ताकि यूआई को खुद को अपडेट कर सकें और प्रोसेसिंग लूप के बीच में रह सकें WPF। – NibblyPig
@ एसएलसी: यदि आप अपने प्रसंस्करण को किसी अन्य थ्रेड में कर रहे हैं, तो आपको यूआई को खुद को अपडेट करने की आवश्यकता नहीं है (केवल एक सामान्य ताज़ा तरीके से)। –