Application.DoEvents Метод

Определение

Обрабатывает все сообщения Windows, которые в данный момент находятся в очереди сообщений.Processes all Windows messages currently in the message queue.

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

Примеры

В следующем примере кода показано использование метода DoEvents.The following code example demonstrates using the DoEvents method. При выполнении примера пользователь может выбрать графические файлы из OpenFileDialog.When the example runs, a user can select graphics files from an OpenFileDialog. Выбранные файлы отображаются в форме.The selected files are displayed in the form. Метод DoEvents вызывает перерисовку формы для каждого открытого графического файла.The DoEvents method forces a repaint of the form for each graphics file opened. Чтобы выполнить этот пример, вставьте следующий код в форму, содержащую PictureBox с именем PictureBox1, OpenFileDialog с именем OpenFileDialog1 и кнопку с именем fileButton.To run this example, paste the following code in a form containing a PictureBox named PictureBox1, an OpenFileDialog named OpenFileDialog1, and a button named fileButton. Вызовите методы InitializePictureBox и InitializeOpenFileDialog из конструктора формы или метода Load.Call the InitializePictureBox and InitializeOpenFileDialog methods from the form's constructor or Load method.

Примечание

В Visual Studio при добавлении OpenFileDialog в форму с помощью операции перетаскивания необходимо изменить следующий метод InitializeOpenFileDialog, удалив строку, которая создает новый экземпляр OpenFileDialog.In Visual Studio, if you add an OpenFileDialog to your form by using a drag operation, you will have to modify the following InitializeOpenFileDialog method by removing the line that creates a new instance of OpenFileDialog.

В этом примере также требуется, чтобы событие Control.Click элемента управления Button и событие FileOk OpenFileDialog были соединены с обработчиками событий, определенными в примере.The example also requires that the Control.Click event of the Button control and the FileOk event of the OpenFileDialog are connected to the event handlers defined in the example. При выполнении примера откройте диалоговое окно, нажав кнопку.When the example is running, display the dialog box by clicking the button.

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

Комментарии

При запуске формы Windows Forms создается новая форма, которая затем ожидает, пока события будут обработаны.When you run a Windows Form, it creates the new form, which then waits for events to handle. Каждый раз, когда форма обрабатывает событие, она обрабатывает весь код, связанный с этим событием.Each time the form handles an event, it processes all the code associated with that event. Все остальные события ожидают в очереди.All other events wait in the queue. Пока код обрабатывает событие, приложение не отвечает.While your code handles the event, your application does not respond. Например, окно не перерисовывается, если в верхней части перетаскивается другое окно.For example, the window does not repaint if another window is dragged on top.

При вызове DoEvents в коде приложение может выполнять другие события.If you call DoEvents in your code, your application can handle the other events. Например, если имеется форма, добавляющая данные в ListBox, и добавляет DoEvents в код, форма перерисовывается при перетаскивании на другое окно.For example, if you have a form that adds data to a ListBox and add DoEvents to your code, your form repaints when another window is dragged over it. Если удалить DoEvents из кода, форма не будет перерисовываться до завершения выполнения обработчика событий нажатия кнопки.If you remove DoEvents from your code, your form will not repaint until the click event handler of the button is finished executing. Дополнительные сведения об обмене сообщениями см. в разделе Ввод данных пользователем в Windows Forms.For more information on messaging, see User Input in Windows Forms.

В отличие от Visual Basic 6,0, метод DoEvents не вызывает метод Thread.Sleep.Unlike Visual Basic 6.0, the DoEvents method does not call the Thread.Sleep method.

Как правило, этот метод используется в цикле для обработки сообщений.Typically, you use this method in a loop to process messages.

Внимание!

Вызов этого метода приводит к приостановке текущего потока во время обработки всех ожидающих окон сообщений.Calling this method causes the current thread to be suspended while all waiting window messages are processed. Если сообщение вызывает срабатывание события, то могут выполняться другие области кода приложения.If a message causes an event to be triggered, then other areas of your application code may execute. Это может привести к тому, что приложение будет демонстрировать непредвиденные поведения, которые трудно отладить.This can cause your application to exhibit unexpected behaviors that are difficult to debug. При выполнении операций или вычислений, которые выполняются длительное время, часто бывает предпочтительнее выполнить эти операции в новом потоке.If you perform operations or computations that take a long time, it is often preferable to perform those operations on a new thread. Дополнительные сведения об асинхронном программировании см. в разделе модель асинхронного программирования (APM).For more information about asynchronous programming, see Asynchronous Programming Model (APM).

Применяется к

Дополнительно