2012-09-03 25 views
10

VB6, OS'ye denetimi döndürmek için çağrılan ve bu tek iş parçacıklı ortamda çok iş parçacıklı davranışı taklit ettiğiniz bir DoEvents() yöntemine sahipti.C# Eşdeğeri VB 6 DoEvents

VB 6 DoEvents()? .NET framework eşdeğeri nedir?

+1

Doevents'ı düşündüğünüzü düşünüyorum. Verim, numaralandırma işleminde kullanılan bir .NET yöntemidir. Ve .NET'teki eşdeğerdir Application.DoEvents() (kullanılan dilden bağımsız olarak) – Zippit

+2

'Application.DoEvents() == DoEvents'? – Marlon

+0

@Marlon: Görüyorum. Aslında her birkaç yılda bir bu soruyu sorduğumu hatırlıyorum. En son ne zaman sorduğumu hatırlayamıyorum. Haklı olabilirsin ve bu cevap olabilir ama hafızam beni başarısız ediyor. Ben de System.Diagnostics.Process sınıfının yöntemlerinden birinde bir yedek bulduğumu düşünüyorum ama emin olamıyorum. –

cevap

8

Application.DoEvents sen Application.DoEvents() kullanabilirsiniz

+0

WPF hakkında ne dersiniz? WinForms'dan nefret ediyorum –

+3

@ColeJohnson Eski Application.DoEvents() yöntemi WPF'de bir [* Dispatcher *] (http://msdn.microsoft.com/en-us/magazine/cc163328.aspx) kullanma lehine genişletilmiştir. veya [* Arka Plan Çalışanı İş Parçacığı *] (http://elegantcode.com/2009/07/03/wpf-multithreading-using-the-backgroundworker-ve-reporting-the-progress-to-the-ui/) adresine İşlemi anlattığınız gibi yapın. Her iki nesneyi kullanma hakkında birkaç makalenin bağlantılarına bakın. –

+0

Genel olarak, DoEvents'ları her zaman kullanmanızı önermiyorum. Bir GUI'yi durdurabilir. Application.DoEvents öğesinin Google sorunları –

23

() (WinForms parçası). Neden Threading sınıfını ya da yalnızca Background Workers'u kullanamazsınız? .net ortamında çalışıyorsanız, DoEvents'u kullanmayın. VB6'da bırakın.

1

Kodunuzda Application.DoEvents() yöntemini çağırırsanız, uygulamanız diğer olayları işleyebilir. Örneğin, bir ListBox'a veri ekleyen ve kodunuza DoEvents ekleyen bir formunuz varsa, formunuz başka bir pencere sürüklendiğinde yeniden yazdırılır. DoEvent'leri kodunuzdan kaldırırsanız, düğmenin tıklatma olay işleyicisi tamamlanana kadar formunuz yeniden çizilmez. Mesajlaşma hakkında daha fazla bilgi için, Windows Formlarında Kullanıcı Girişi'ne bakın.

Visual Basic 6.0'dan farklı olarak, DoEvents yöntemi Thread.Sleep yöntemini çağırmaz.

5

şu Uygulamadan hakkında bilmek gerekmez genel DoEvents tipi yöntemi

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; 
    } 
} 
} 

olduğunu.