Application.DoEvents Application.DoEvents Application.DoEvents Application.DoEvents Method

Definición

Procesa todos los mensajes de Windows que hay actualmente en la cola de mensajes.Processes all Windows messages currently in the message queue.

public:
 static void DoEvents();
public static void DoEvents ();
static member DoEvents : unit -> unit
Public Shared Sub DoEvents ()

Ejemplos

En el ejemplo de código siguiente se DoEvents muestra cómo utilizar el método.The following code example demonstrates using the DoEvents method. Cuando se ejecuta el ejemplo, un usuario puede seleccionar archivos de gráficos OpenFileDialogde.When the example runs, a user can select graphics files from an OpenFileDialog. Los archivos seleccionados se muestran en el formulario.The selected files are displayed in the form. El DoEvents método obliga a que se vuelva a dibujar el formulario para cada archivo de gráficos abierto.The DoEvents method forces a repaint of the form for each graphics file opened. Para ejecutar este ejemplo, pegue el código siguiente en un formulario que contenga PictureBox1un PictureBox denominado OpenFileDialog , OpenFileDialog1un denominado y un botón fileButtondenominado.To run this example, paste the following code in a form containing a PictureBox named PictureBox1, an OpenFileDialog named OpenFileDialog1, and a button named fileButton. Llame a InitializePictureBox los InitializeOpenFileDialog métodos y desde el método o Load constructor del formulario.Call the InitializePictureBox and InitializeOpenFileDialog methods from the form's constructor or Load method.

Nota

En Visual Studio, si agrega un OpenFileDialog al formulario mediante una operación de arrastre, tendrá que modificar el método siguiente InitializeOpenFileDialog quitando la línea que crea una nueva instancia de OpenFileDialog.In Visual Studio, if you add an OpenFileDialog to your form by using a drag operation, you will have to modify the following InitializeOpenFileDialog method by removing the line that creates a new instance of OpenFileDialog.

En el Control.Click ejemplo también OpenFileDialog se requiere que el evento Button del control y FileOk el evento de estén conectados a los controladores de eventos definidos en el ejemplo.The example also requires that the Control.Click event of the Button control and the FileOk event of the OpenFileDialog are connected to the event handlers defined in the example. Cuando se esté ejecutando el ejemplo, haga clic en el botón para mostrar el cuadro de diálogo.When the example is running, display the dialog box by clicking the button.

void InitializePictureBox()
{
   this->PictureBox1 = gcnew System::Windows::Forms::PictureBox;
   this->PictureBox1->BorderStyle =
      System::Windows::Forms::BorderStyle::FixedSingle;
   this->PictureBox1->SizeMode = PictureBoxSizeMode::StretchImage;
   this->PictureBox1->Location = System::Drawing::Point( 72, 112 );
   this->PictureBox1->Name = "PictureBox1";
   this->PictureBox1->Size = System::Drawing::Size( 160, 136 );
   this->PictureBox1->TabIndex = 6;
   this->PictureBox1->TabStop = false;
}

void InitializeOpenFileDialog()
{
   this->OpenFileDialog1 = gcnew System::Windows::Forms::OpenFileDialog;
   
   // Set the file dialog to filter for graphics files.
   this->OpenFileDialog1->Filter =
      "Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" +
      "All files (*.*)|*.*";
   
   // Allow the user to select multiple images.
   this->OpenFileDialog1->Multiselect = true;
   this->OpenFileDialog1->Title = "My Image Browser";
}

void fileButton_Click( System::Object^ sender, System::EventArgs^ e )
{
   OpenFileDialog1->ShowDialog();
}

// This method handles the FileOK event.  It opens each file 
// selected and loads the image from a stream into PictureBox1.
void OpenFileDialog1_FileOk( Object^ sender,
   System::ComponentModel::CancelEventArgs^ e )
{
   this->Activate();
   array<String^>^ files = OpenFileDialog1->FileNames;
   
   // Open each file and display the image in PictureBox1.
   // Call Application.DoEvents to force a repaint after each
   // file is read.        
   for each ( String^ file in files )
   {
      System::IO::FileInfo^ fileInfo = gcnew System::IO::FileInfo( file );
      System::IO::FileStream^ fileStream = fileInfo->OpenRead();
      PictureBox1->Image = System::Drawing::Image::FromStream( fileStream );
      Application::DoEvents();
      fileStream->Close();
      
      // Call Sleep so the picture is briefly displayed, 
      //which will create a slide-show effect.
      System::Threading::Thread::Sleep( 2000 );
   }
   PictureBox1->Image = nullptr;
}
private void InitializePictureBox()
{
	this.pictureBox1 = new System.Windows.Forms.PictureBox();
	this.pictureBox1.BorderStyle = 
		System.Windows.Forms.BorderStyle.FixedSingle;
	this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
	this.pictureBox1.Location = new System.Drawing.Point(72, 112);
	this.pictureBox1.Name = "pictureBox1";
	this.pictureBox1.Size = new System.Drawing.Size(160, 136);
	this.pictureBox1.TabIndex = 6;
	this.pictureBox1.TabStop = false;
}

private void InitializeOpenFileDialog()
{
	this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();

	// Set the file dialog to filter for graphics files.
	this.openFileDialog1.Filter = 
		"Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" + 
		"All files (*.*)|*.*";

	// Allow the user to select multiple images.
	this.openFileDialog1.Multiselect = true;
	this.openFileDialog1.Title = "My Image Browser";
	
}

private void fileButton_Click(System.Object sender, System.EventArgs e)
{
	openFileDialog1.ShowDialog();
}


// This method handles the FileOK event.  It opens each file 
// selected and loads the image from a stream into pictureBox1.
private void openFileDialog1_FileOk(object sender, 
	System.ComponentModel.CancelEventArgs e)
{

	this.Activate();
	 string[] files = openFileDialog1.FileNames;

	// Open each file and display the image in pictureBox1.
	// Call Application.DoEvents to force a repaint after each
	// file is read.        
	foreach (string file in files )
	{
		System.IO.FileInfo fileInfo = new System.IO.FileInfo(file);
		System.IO.FileStream fileStream = fileInfo.OpenRead();
		pictureBox1.Image = System.Drawing.Image.FromStream(fileStream);
		Application.DoEvents();
		fileStream.Close();

		// Call Sleep so the picture is briefly displayed, 
		//which will create a slide-show effect.
		System.Threading.Thread.Sleep(2000);
	}
	pictureBox1.Image = null;
}
Private Sub InitializePictureBox()
    Me.PictureBox1 = New System.Windows.Forms.PictureBox
    Me.PictureBox1.BorderStyle = _
        System.Windows.Forms.BorderStyle.FixedSingle
    Me.PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    Me.PictureBox1.Location = New System.Drawing.Point(72, 112)
    Me.PictureBox1.Name = "PictureBox1"
    Me.PictureBox1.Size = New System.Drawing.Size(160, 136)
    Me.PictureBox1.TabStop = False
End Sub

Private Sub InitializeOpenFileDialog()
    Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog

    ' Set the file dialog to filter for graphics files.
    Me.OpenFileDialog1.Filter = _
    "Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*"

    ' Allow the user to select multiple images.
    Me.OpenFileDialog1.Multiselect = True
    Me.OpenFileDialog1.Title = "My Image Browser"
End Sub

Private Sub fileButton_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles FileButton.Click
    OpenFileDialog1.ShowDialog()
End Sub


' This method handles the FileOK event.  It opens each file 
' selected and loads the image from a stream into PictureBox1.
Private Sub OpenFileDialog1_FileOk(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
 Handles OpenFileDialog1.FileOk

    Me.Activate()
    Dim file, files() As String
    files = OpenFileDialog1.FileNames

    ' Open each file and display the image in PictureBox1.
    ' Call Application.DoEvents to force a repaint after each
    ' file is read.        
    For Each file In files
        Dim fileInfo As System.IO.FileInfo = New System.IO.FileInfo(file)
        Dim fileStream As System.IO.FileStream = fileInfo.OpenRead()
        PictureBox1.Image = System.Drawing.Image.FromStream(fileStream)
        Application.DoEvents()
        fileStream.Close()

        ' Call Sleep so the picture is briefly displayed, 
        'which will create a slide-show effect.
        System.Threading.Thread.Sleep(2000)
    Next
    PictureBox1.Image = Nothing
End Sub

Comentarios

Al ejecutar un Windows Form, se crea el nuevo formulario, que después espera que se controlen los eventos.When you run a Windows Form, it creates the new form, which then waits for events to handle. Cada vez que el formulario controla un evento, procesa todo el código asociado a ese evento.Each time the form handles an event, it processes all the code associated with that event. Todos los demás eventos esperan en la cola.All other events wait in the queue. Mientras el código controla el evento, la aplicación no responde.While your code handles the event, your application does not respond. Por ejemplo, la ventana no vuelve a dibujarse si se arrastra otra ventana encima.For example, the window does not repaint if another window is dragged on top.

Si llama a DoEvents en el código, la aplicación puede controlar los demás eventos.If you call DoEvents in your code, your application can handle the other events. Por ejemplo, si tiene un formulario que agrega datos a un ListBox y agrega DoEvents a su código, el formulario se vuelve a dibujar cuando se arrastra otra ventana sobre él.For example, if you have a form that adds data to a ListBox and add DoEvents to your code, your form repaints when another window is dragged over it. Si quita DoEvents del código, el formulario no volverá a dibujarse hasta que el controlador de eventos Click del botón haya terminado de ejecutarse.If you remove DoEvents from your code, your form will not repaint until the click event handler of the button is finished executing. Para obtener más información sobre la mensajería, vea la entrada del usuario en Windows Forms.For more information on messaging, see User Input in Windows Forms.

A diferencia de Visual Basic 6,0, DoEvents el método no llama al Thread.Sleep método.Unlike Visual Basic 6.0, the DoEvents method does not call the Thread.Sleep method.

Normalmente, este método se utiliza en un bucle para procesar los mensajes.Typically, you use this method in a loop to process messages.

Precaución

La llamada a este método hace que el subproceso actual se suspenda mientras se procesan todos los mensajes de la ventana en espera.Calling this method causes the current thread to be suspended while all waiting window messages are processed. Si un mensaje provoca el desencadenamiento de un evento, es posible que se ejecuten otras áreas del código de la aplicación.If a message causes an event to be triggered, then other areas of your application code may execute. Esto puede hacer que la aplicación muestre comportamientos inesperados que son difíciles de depurar.This can cause your application to exhibit unexpected behaviors that are difficult to debug. Si realiza operaciones o cálculos que tardan mucho tiempo, suele ser preferible realizar esas operaciones en un nuevo subproceso.If you perform operations or computations that take a long time, it is often preferable to perform those operations on a new thread. Para obtener más información sobre la programación asincrónica, vea modelo de programación asincrónica (APM).For more information about asynchronous programming, see Asynchronous Programming Model (APM).

Se aplica a

Consulte también: