Application.DoEvents Metoda

Definicja

Przetwarza wszystkie komunikaty systemu Windows aktualnie w kolejce komunikatów.

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

Przykłady

Poniższy przykład kodu przedstawia użycie DoEvents metody . Po uruchomieniu przykładu użytkownik może wybrać pliki graficzne z pliku OpenFileDialog. Wybrane pliki są wyświetlane w formularzu. Metoda DoEvents wymusza powtórzenia formularza dla każdego otwartego pliku graficznego. Aby uruchomić ten przykład, wklej następujący kod w formularzu zawierającym nazwany PictureBoxPictureBox1, nazwany OpenFileDialog i przycisk o nazwie OpenFileDialog1fileButton. Wywołaj InitializePictureBox metody i InitializeOpenFileDialog z konstruktora lub Load metody formularza.

Uwaga

W programie Visual Studio, jeśli dodasz element OpenFileDialog do formularza przy użyciu operacji przeciągania, musisz zmodyfikować następującą InitializeOpenFileDialog metodę, usuwając wiersz, który tworzy nowe wystąpienie OpenFileDialogklasy .

Przykład wymaga również, aby Control.Click zdarzenie kontrolki Button i FileOk zdarzenie OpenFileDialog obiektu było połączone z procedurami obsługi zdarzeń zdefiniowanymi w przykładzie. Po uruchomieniu przykładu wyświetl okno dialogowe, klikając przycisk .

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

Uwagi

Po uruchomieniu formularza systemu Windows tworzy on nowy formularz, który następnie oczekuje na obsługę zdarzeń. Za każdym razem, gdy formularz obsługuje zdarzenie, przetwarza cały kod skojarzony z tym zdarzeniem. Wszystkie inne zdarzenia czekają w kolejce. Podczas gdy kod obsługuje zdarzenie, aplikacja nie odpowiada. Na przykład okno nie zostanie ponownie wyświetlone, jeśli w górnej części zostanie przeciągnięte inne okno.

W przypadku wywołania DoEvents w kodzie aplikacja może obsługiwać inne zdarzenia. Jeśli na przykład masz formularz, który dodaje dane do ListBox kodu i dodaje DoEvents je do kodu, po przeciągnięciu na niego innego okna. Jeśli usuniesz DoEvents plik z kodu, formularz nie zostanie ponownie wyświetlony, dopóki procedura obsługi zdarzeń kliknięcia przycisku nie zostanie zakończona. Aby uzyskać więcej informacji na temat obsługi komunikatów, zobacz Dane wejściowe użytkownika w Windows Forms.

W przeciwieństwie do języka Visual Basic 6.0 DoEvents metoda nie wywołuje Thread.Sleep metody .

Zazwyczaj ta metoda jest używana w pętli do przetwarzania komunikatów.

Przestroga

Wywołanie tej metody powoduje wstrzymanie bieżącego wątku podczas przetwarzania wszystkich komunikatów okna oczekiwania. Jeśli komunikat powoduje wyzwolenie zdarzenia, mogą zostać wykonane inne obszary kodu aplikacji. Może to spowodować, że aplikacja będzie wykazywać nieoczekiwane zachowania, które są trudne do debugowania. Jeśli wykonujesz operacje lub obliczenia, które zajmują dużo czasu, często zaleca się wykonywanie tych operacji na nowym wątku. Aby uzyskać więcej informacji na temat programowania asynchronicznego, zobacz Asynchronous Programming Model (APM).

Dotyczy

Zobacz też