Application.DoEvents Methode

Definition

Verarbeitet alle Windows-Meldungen, die sich derzeit in der Meldungswarteschlange befinden.

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

Beispiele

Im folgenden Codebeispiel wird die Verwendung der DoEvents -Methode veranschaulicht. Wenn das Beispiel ausgeführt wird, kann ein Benutzer Grafikdateien aus einem OpenFileDialogauswählen. Die ausgewählten Dateien werden im Formular angezeigt. Die DoEvents -Methode erzwingt eine Neubemalung des Formulars für jede geöffnete Grafikdatei. Fügen Sie zum Ausführen dieses Beispiels den folgenden Code in ein Formular ein, das einen PictureBox benannten PictureBox1, einen OpenFileDialog benannten OpenFileDialog1und eine Schaltfläche mit dem Namen enthält fileButton. Rufen Sie die InitializePictureBox Methoden und InitializeOpenFileDialog über den Konstruktor oder Load die Methode des Formulars auf.

Hinweis

Wenn Sie in Visual Studio einem Formular mithilfe eines Ziehvorgangs eine OpenFileDialog hinzufügen, müssen Sie die folgende InitializeOpenFileDialog Methode ändern, indem Sie die Zeile entfernen, die eine neue instance von OpenFileDialogerstellt.

Das Beispiel erfordert auch, dass das Control.Click -Ereignis des Button -Steuerelements und das FileOk -Ereignis von mit OpenFileDialog den im Beispiel definierten Ereignishandlern verbunden sind. Wenn das Beispiel ausgeführt wird, zeigen Sie das Dialogfeld an, indem Sie auf die Schaltfläche klicken.

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

Hinweise

Wenn Sie ein Windows Form-Formular ausführen, wird das neue Formular erstellt, das dann auf die Behandlung von Ereignissen wartet. Jedes Mal, wenn das Formular ein Ereignis verarbeitet, verarbeitet es den gesamten Code, der diesem Ereignis zugeordnet ist. Alle anderen Ereignisse warten in der Warteschlange. Während Ihr Code das Ereignis verarbeitet, reagiert Ihre Anwendung nicht. Beispielsweise wird das Fenster nicht neu gezeichnet, wenn ein anderes Fenster nach oben gezogen wird.

Wenn Sie Ihren Code aufrufen DoEvents , kann Ihre Anwendung die anderen Ereignisse verarbeiten. Wenn Sie z. B. über ein Formular verfügen, das Daten zu einem ListBox hinzufügt und ihrem Code hinzugefügt DoEvents wird, wird das Formular neu gezeichnet, wenn ein anderes Fenster darüber gezogen wird. Wenn Sie den Code entfernen DoEvents , wird das Formular erst dann neu gestrichen, wenn der Klickereignishandler der Schaltfläche ausgeführt wurde. Weitere Informationen zum Messaging finden Sie unter Benutzereingabe in Windows Forms.

Im Gegensatz zu Visual Basic 6.0 ruft die DoEvents -Methode die Thread.Sleep -Methode nicht auf.

In der Regel verwenden Sie diese Methode in einer Schleife, um Nachrichten zu verarbeiten.

Achtung

Das Aufrufen dieser Methode bewirkt, dass der aktuelle Thread angehalten wird, während alle Wartefenstermeldungen verarbeitet werden. Wenn eine Nachricht dazu führt, dass ein Ereignis ausgelöst wird, werden möglicherweise andere Bereiche Ihres Anwendungscodes ausgeführt. Dies kann dazu führen, dass Ihre Anwendung unerwartete Verhaltensweisen aufweist, die schwer zu debuggen sind. Wenn Sie Vorgänge oder Berechnungen ausführen, die lange dauern, ist es häufig vorzuziehen, diese Vorgänge für einen neuen Thread auszuführen. Weitere Informationen zur asynchronen Programmierung finden Sie unter Asynchrones Programmiermodell (APM).

Gilt für:

Weitere Informationen