Application.DoEvents Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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é OpenFileDialog1
et 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).