2012-09-03 18 views
10

वीबी 6 के पास एक DoEvents() विधि थी जिसे आपने ओएस पर नियंत्रण वापस करने और उस एकल थ्रेडेड वातावरण में बहु-थ्रेडेड व्यवहार की नकल करने के लिए बुलाया था।सी # वीबी 6 DoEvents

वीबी 6 DoEvents() के बराबर .NET फ्रेमवर्क क्या है?

+1

मुझे लगता है कि आप Doevents के बारे में सोच रहे हैं। यील्ड एक .NET विधि है जो गणना प्रबंधन में उपयोग की जाती है। और .NET में समतुल्य अनुप्रयोग है। DoEvents() (भाषा का उपयोग किए बिना) – Zippit

+2

'आवेदन। DoEvents() == DoEvents'? – Marlon

+0

@ मार्लन: मैं देखता हूं। वास्तव में मुझे हर कुछ वर्षों में इस सवाल से पूछना याद है। जब मैं इसे आखिरी बार पूछा तो मुझे याद नहीं है। आप सही हो सकते हैं और यह जवाब हो सकता है लेकिन मेरी याददाश्त मुझे विफल कर देती है। मैं यह भी सोच रहा हूं कि मुझे सिस्टम के तरीकों में से एक विकल्प मिला। डायग्नोस्टिक्स.प्रोसेस क्लास लेकिन मुझे निश्चित रूप से याद नहीं है। –

उत्तर

8

Application.DoEvents() (WinForms का हिस्सा)

+0

डब्ल्यूपीएफ के बारे में क्या? मुझे WinForms –

+3

@ColeJohnson पुराना एप्लिकेशन है। डूवेन्ट्स() विधि को [* डिस्पैचर *] (http://msdn.microsoft.com/en-us/magazine/cc163328.aspx) का उपयोग करने के पक्ष में WPF में चित्रित किया गया है। या एक [* पृष्ठभूमि कार्यकर्ता थ्रेड *] (http://elegantcode.com/2009/07/03/wpf-multithreading-using-the-backgroundworker-and- रिपोर्टिंग- theprogress-to-the-ui/) जैसा आपने वर्णन किया है प्रसंस्करण करें। दोनों वस्तुओं का उपयोग करने के तरीके पर कुछ लेखों के लिए लिंक देखें। –

+0

आम तौर पर, मैं वैसे भी DoEvents का उपयोग करने की अनुशंसा नहीं करता हूं। यह एक जीयूआई रोक सकता है। आवेदन की Google समस्याएं। DEEvents –

23

आप Application.DoEvents() उपयोग कर सकते हैं। Threading कक्षा या बस Background Workers का उपयोग क्यों नहीं करें? यदि आप .NET वातावरण में कर रहे हैं, तो DoEvents का उपयोग न करें। इसे वीबी 6 पर छोड़ दें।

1

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

विजुअल बेसिक 6.0 के विपरीत, DoEvents विधि थ्रेड स्लीप विधि को कॉल नहीं करती है।

5

निम्नलिखित एक सामान्य DoEvents प्रकार विधि

using System; 
using System.Windows.Threading; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Security.Permissions; 

namespace Utilites 
{ 
/// <summary> 
/// Emulates the VB6 DoEvents to refresh a window during long running events 
/// </summary> 
public class ScreenEvents 
{ 
    [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] 
    public static void DoEvents() 
    { 
     DispatcherFrame frame = new DispatcherFrame(); 
     Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, 
      new DispatcherOperationCallback(ExitFrame), frame); 
     Dispatcher.PushFrame(frame); 
    } 

    public static object ExitFrame(object f) 
    { 
     ((DispatcherFrame)f).Continue = false; 

     return null; 
    } 
} 
} 

यह आवेदन के बारे में पता करने की जरूरत नहीं है।