Application.DoEvents Methode

Definitie

Verwerkt alle Windows berichten die zich momenteel in de berichtenwachtrij bevinden.

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

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u de DoEvents methode gebruikt. Wanneer het voorbeeld wordt uitgevoerd, kan een gebruiker grafische bestanden selecteren uit een OpenFileDialog. De geselecteerde bestanden worden weergegeven in het formulier. De DoEvents methode dwingt een repaint van het formulier af voor elk geopend grafisch bestand. Als u dit voorbeeld wilt uitvoeren, plakt u de volgende code in een formulier met een PictureBox naam, een PictureBox1 naam OpenFileDialogOpenFileDialog1en een knop met de naamfileButton. Roep de InitializePictureBox en InitializeOpenFileDialog methoden aan vanuit de constructor of Load methode van het formulier.

Note

Als u in Visual Studio een OpenFileDialog aan uw formulier toevoegt met behulp van een sleepbewerking, moet u de volgende methode InitializeOpenFileDialog wijzigen door de regel te verwijderen waarmee een nieuw exemplaar van OpenFileDialog wordt gemaakt.

Het voorbeeld vereist ook dat de Control.Click gebeurtenis van het Button besturingselement en de gebeurtenis van de FileOk gebeurtenis OpenFileDialog zijn verbonden met de gebeurtenis-handlers die in het voorbeeld zijn gedefinieerd. Wanneer het voorbeeld wordt uitgevoerd, geeft u het dialoogvenster weer door op de knop te klikken.

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

Opmerkingen

Wanneer u een Windows Formulier uitvoert, wordt het nieuwe formulier gemaakt, waarna wordt gewacht tot gebeurtenissen worden verwerkt. Telkens wanneer het formulier een gebeurtenis verwerkt, worden alle code verwerkt die aan die gebeurtenis is gekoppeld. Alle andere gebeurtenissen wachten in de wachtrij. Terwijl uw code de gebeurtenis afhandelt, reageert uw toepassing niet. Het venster wordt bijvoorbeeld niet opnieuw geladen als er een ander venster bovenaan wordt gesleept.

Als u uw code aanroept DoEvents , kan uw toepassing de andere gebeurtenissen afhandelen. Als u bijvoorbeeld een formulier hebt dat gegevens toevoegt aan een ListBox en aan uw code toevoegt DoEvents , wordt het formulier opnieuw geladen wanneer er een ander venster overheen wordt gesleept. Als u uit de code verwijdert DoEvents , wordt het formulier pas opnieuw geladen wanneer de klik-gebeurtenis-handler van de knop is uitgevoerd. Zie Gebruikersinvoer in Windows Forms voor meer informatie over berichten.

In tegenstelling tot Visual Basic 6.0 roept de methode DoEvents de methode Thread.Sleep niet aan.

Normaal gesproken gebruikt u deze methode in een lus om berichten te verwerken.

Caution

Als u deze methode aanroept, wordt de huidige thread onderbroken terwijl alle berichten in het wachtvenster worden verwerkt. Als een bericht ervoor zorgt dat een gebeurtenis wordt geactiveerd, kunnen andere gebieden van uw toepassingscode worden uitgevoerd. Dit kan ertoe leiden dat uw toepassing onverwacht gedrag vertoont dat moeilijk kan worden opgespoord. Als u bewerkingen of berekeningen uitvoert die lang duren, is het vaak raadzaam om deze bewerkingen uit te voeren op een nieuwe thread. Zie Asynchroon programmeermodel (APM) voor meer informatie over asynchrone programmering.

Van toepassing op

Zie ook