Application.DoEvents Metodo

Definizione

Elabora tutti i messaggi di Windows attualmente presenti nella coda di messaggi.

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

Esempio

Nell'esempio di codice seguente viene illustrato l'uso del DoEvents metodo . Quando viene eseguito l'esempio, un utente può selezionare i file grafici da un OpenFileDialogoggetto . I file selezionati vengono visualizzati nel modulo. Il DoEvents metodo forza un repository del modulo per ogni file grafico aperto. Per eseguire questo esempio, incollare il codice seguente in un modulo contenente un PictureBox denominato , un OpenFileDialog denominato PictureBox1e un pulsante denominato fileButtonOpenFileDialog1. Chiamare i InitializePictureBox metodi e InitializeOpenFileDialog dal costruttore o Load dal metodo del modulo.

Nota

In Visual Studio, se si aggiunge un OpenFileDialog oggetto al modulo usando un'operazione di trascinamento, è necessario modificare il metodo seguente InitializeOpenFileDialog rimuovendo la riga che crea una nuova istanza di OpenFileDialog.

L'esempio richiede inoltre che l'evento Control.Click del Button controllo e l'evento FileOk dell'oggetto OpenFileDialog siano connessi ai gestori eventi definiti nell'esempio. Quando l'esempio è in esecuzione, visualizzare la finestra di dialogo facendo clic sul pulsante .

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

Commenti

Quando si esegue un Windows Form, crea il nuovo modulo, che attende quindi che gli eventi vengano gestiti. Ogni volta che il modulo gestisce un evento, elabora tutto il codice associato a tale evento. Tutti gli altri eventi attendeno nella coda. Mentre il codice gestisce l'evento, l'applicazione non risponde. Ad esempio, la finestra non esegue il repository se un'altra finestra viene trascinata in alto.

Se si chiama DoEvents nel codice, l'applicazione può gestire gli altri eventi. Ad esempio, se si dispone di un modulo che aggiunge dati a un ListBox e si aggiunge DoEvents al codice, il modulo viene riintato quando viene trascinata un'altra finestra. Se si rimuove DoEvents dal codice, il modulo non eseguirà il repository fino al completamento dell'esecuzione del gestore eventi di clic del pulsante. Per altre informazioni sulla messaggistica, vedere Input utente in Windows Forms.

A differenza di Visual Basic 6.0, il DoEvents metodo non chiama il Thread.Sleep metodo.

In genere, si usa questo metodo in un ciclo per elaborare i messaggi.

Attenzione

La chiamata a questo metodo causa la sospensione del thread corrente mentre vengono elaborati tutti i messaggi della finestra in attesa. Se un messaggio causa l'attivazione di un evento, altre aree del codice dell'applicazione possono essere eseguite. In questo modo l'applicazione può presentare comportamenti imprevisti difficili da eseguire nel debug. Se si eseguono operazioni o calcoli che richiedono molto tempo, è spesso preferibile eseguire queste operazioni in un nuovo thread. Per altre informazioni sulla programmazione asincrona, vedere Modello di programmazione asincrona (APM).

Si applica a

Vedi anche