Partager via


Application.DoEvents Méthode

Définition

Traite tous les messages Windows présents dans la file d'attente de messages.

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

Exemples

L’exemple de code suivant illustre l’utilisation de la DoEvents méthode . Lorsque l’exemple s’exécute, un utilisateur peut sélectionner des fichiers graphiques à partir d’un OpenFileDialog. Les fichiers sélectionnés sont affichés dans le formulaire. La DoEvents méthode force un repeint du formulaire pour chaque fichier graphique ouvert. Pour exécuter cet exemple, collez le code suivant dans un formulaire contenant un PictureBox nommé PictureBox1, un OpenFileDialog nommé OpenFileDialog1et un bouton nommé fileButton. Appelez les InitializePictureBox méthodes et InitializeOpenFileDialog à partir du constructeur ou Load de la méthode du formulaire.

Notes

Dans Visual Studio, si vous ajoutez un OpenFileDialog à votre formulaire à l’aide d’une opération de glissement, vous devrez modifier la méthode suivante InitializeOpenFileDialog en supprimant la ligne qui crée une nouvelle instance de OpenFileDialog.

L’exemple exige également que l’événement Control.Click du Button contrôle et l’événement FileOk du OpenFileDialog soient connectés aux gestionnaires d’événements définis dans l’exemple. Lorsque l’exemple est en cours d’exécution, affichez la boîte de dialogue en cliquant sur le bouton .

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

Remarques

Lorsque vous exécutez un Windows Form, il crée le nouveau formulaire, qui attend ensuite que les événements doivent être gérés. Chaque fois que le formulaire gère un événement, il traite tout le code associé à cet événement. Tous les autres événements attendent dans la file d’attente. Bien que votre code gère l’événement, votre application ne répond pas. Par exemple, la fenêtre ne repeint pas si une autre fenêtre est déplacée sur le dessus.

Si vous appelez DoEvents votre code, votre application peut gérer les autres événements. Par exemple, si vous avez un formulaire qui ajoute des données à un ListBox et ajoute DoEvents à votre code, votre formulaire repeint lorsqu’une autre fenêtre est déplacée dessus. Si vous supprimez DoEvents de votre code, votre formulaire ne sera pas repeint tant que l’exécution du gestionnaire d’événements click du bouton n’est pas terminée. Pour plus d’informations sur la messagerie, consultez Entrée utilisateur dans Windows Forms.

Contrairement à Visual Basic 6.0, la DoEvents méthode n’appelle pas la Thread.Sleep méthode .

En règle générale, vous utilisez cette méthode dans une boucle pour traiter les messages.

Attention

L’appel de cette méthode entraîne la suspension du thread actuel pendant le traitement de tous les messages de fenêtre d’attente. Si un message provoque le déclenchement d’un événement, d’autres zones de votre code d’application peuvent s’exécuter. Cela peut amener votre application à présenter des comportements inattendus qui sont difficiles à déboguer. Si vous effectuez des opérations ou des calculs qui prennent beaucoup de temps, il est souvent préférable d’effectuer ces opérations sur un nouveau thread. Pour plus d’informations sur la programmation asynchrone, consultez Modèle de programmation asynchrone (APM).

S’applique à

Voir aussi