2011-02-12 11 views
7

Application.DoEvents() सिर्फ फ़ॉर्म के लिए है?एप्लिकेशन है। DoEvents() केवल WinForms के लिए?

मैंने सोचा था कि इस आदेश का उपयोग यह सुनिश्चित करने के लिए किया गया था कि पहले सभी आदेश संसाधित हो गए हैं लेकिन अब the documentation पढ़ने के बाद, अब मुझे यकीन नहीं है।

+4

आप वास्तव में कभी 'उपयोग करने के लिए Application.DoEvents' की जरूरत नहीं होनी चाहिए। आप कौनसी समस्याएं हल करने की कोशिश कर रहे हैं? शायद कोई ऐसा करने का बेहतर तरीका सुझा सकता है। –

+0

यह सिर्फ 'DoEvents' नहीं है। यह पूरी कक्षा है। यही कारण है कि यह 'System.Windows.Forms.Aplication' है ... – Timwi

उत्तर

14

हां, यह वास्तव में विंडोज़ फॉर्मों का लक्ष्य है। हालांकि, मेरे विचार में जहां से संभव हो इसे टालना चाहिए।

आमतौर पर डेवलपर्स द्वारा एक हैक के रूप में उपयोग किया जाता है जो एक अलग धागे पर लंबे समय से चलने वाले संचालन को लेकर परेशान नहीं होना चाहते हैं ... लेकिन इसका मतलब है कि वे फिर से प्रवेश करने वाले मुद्दों को पेश कर रहे हैं जो बहुत कठिन हो सकते हैं ट्रैक करें, साथ ही साथ कुछ समय के लिए यूआई थ्रेड को अवरुद्ध कर दें (और यदि इसमें फ़ाइल ऑपरेशन की तरह कुछ शामिल है, तो आप वास्तव में भविष्यवाणी नहीं कर सकते कि ऑपरेशन उपयोगकर्ता को दिखाई देने वाले प्रभाव के लिए पर्याप्त तेज़ी से पूरा करेगा या नहीं)।

+1

+1000, न केवल आपके विचार में। इसका बिल्कुल उपयोग करने का कोई कारण नहीं है। –

+0

'DoEvents' 'संदेशबॉक्स' जैसे अवरुद्ध संचालन को लागू करने के लिए उपयोगी हो सकता है। – Vlad

+0

@Vlad: मेरा मानना ​​है कि बाकी यूआई इनपुट को अक्षम करना बेहतर है। अन्यथा आपके DoEvents का अभी भी मतलब हो सकता है कि शेष यूआई जवाब देना शुरू कर देता है जब आप इसे नहीं चाहते हैं। –

3

WinForms के बिना, कोई मानक ईवेंट कतार नहीं है। (ठीक है, डब्ल्यूपीएफ में एक इवेंट कतार है, लेकिन यह सिर्फ एक और ढांचा है)।

+0

"यह सिर्फ एक और ढांचा है" से आपका क्या मतलब है? –

+0

@ कोडी: इसका मतलब है कि एक सी # प्रोग्राम एक WinForms या WPF प्रोग्राम आवश्यक नहीं है। डब्ल्यूपीएफ सी # के शीर्ष पर बनाया गया एक ढांचा है (और WinForms भी है)।इवेंट कतार केवल तभी उपलब्ध होगी यदि आप कुछ ढांचे का उपयोग करते हैं, उदाहरण के लिए, WinForms या WPF, लेकिन डिफ़ॉल्ट रूप से नहीं। – Vlad

+0

निश्चित रूप से। लेकिन एएसपी.नेट नहीं है (उदाहरण के लिए) * भी * एक ढांचा? 'DoEvents' वहाँ ज्यादा समझ में नहीं आता है। –

2

हां, यह केवल विंडोज फॉर्म के लिए है। यह कंसोल या एएसपी.NET अनुप्रयोग में समझ में नहीं आता है, क्योंकि कोई संदेश लूप नहीं है। here दिखाए गए अनुसार प्रेषक का उपयोग करके इसे WPF में करना संभव है। वैसे भी, मैं जॉन द्वारा समझाए गए कारणों के लिए, शायद एक त्वरित और गंदे अनुप्रयोग को छोड़कर DoEvents का उपयोग करने की अनुशंसा नहीं करता।

3

क्या आप को प्राप्त करने की कोशिश कर रहे कुछ (जैसे। एक फाइल एक निश्चित निर्देशिका में गिरा दिया जाना) आपके आवेदन के बाहर होने का इंतजार कर रहे हैं, तो एक संभावित समाधान, System.Timers की टाइमर वर्ग होगा नामस्थान।

एक उदाहरण (MSDN पर आधारित): MSDN पर

Private Sub SetTimer() 
    Dim aTimer As New System.Timers.Timer 
    AddHandler aTimer.Elapsed, AddressOf OnTimedEvent 
    aTimer.Interval = 5000 
    aTimer.Enabled = True 

    Console.WriteLine("Press q to exit") 
    While Console.Read <> Asc("q") 
    End While 
End Sub 

Private Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs) 
    'Do the job here 
    Console.WriteLine("HELLO WORLD!") 
    'Don't forget to disable the timer if you don't need it anymore 
    'Source.Enabled = False 
End Sub 

और जानकारी: http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.71%29.aspx

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