Bahasa

Application.DoEvents Metode

Definisi

Memproses semua pesan Windows saat ini dalam antrean pesan.

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

Contoh

Contoh kode berikut menunjukkan menggunakan DoEvents metode . Saat contoh berjalan, pengguna dapat memilih file grafis dari OpenFileDialog. Berkas terpilih ditampilkan dalam formulir. Metode ini DoEvents memaksa pengecatan ulang formulir untuk setiap file grafis yang dibuka. Untuk menjalankan contoh ini, tempelkan kode berikut dalam formulir yang berisi PictureBox bernama , bernama PictureBox1OpenFileDialog, dan tombol bernama OpenFileDialog1fileButton. InitializePictureBox Panggil metode dan InitializeOpenFileDialog dari konstruktor atau Load metode formulir.

Note

Dalam Visual Studio, jika Anda menambahkan OpenFileDialog ke formulir Anda dengan menggunakan operasi seret, Anda harus memodifikasi metode InitializeOpenFileDialog berikut dengan menghapus baris yang membuat instans baru OpenFileDialog.

Contoh ini juga mengharuskan Control.Click peristiwa Button kontrol dan FileOk peristiwa OpenFileDialog terhubung ke penanganan aktivitas yang ditentukan dalam contoh. Saat contoh berjalan, tampilkan kotak dialog dengan mengklik tombol .

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

Keterangan

Saat Anda menjalankan Formulir Windows, formulir tersebut akan membuat formulir baru, yang kemudian menunggu peristiwa ditangani. Setiap kali formulir menangani peristiwa, formulir memproses semua kode yang terkait dengan peristiwa tersebut. Semua peristiwa lain menunggu dalam antrean. Saat kode Anda menangani peristiwa, aplikasi Anda tidak merespons. Misalnya, jendela tidak mengecat ulang jika jendela lain diseret di atas.

Jika Anda memanggil DoEvents kode, aplikasi Anda dapat menangani peristiwa lain. Misalnya, jika Anda memiliki formulir yang menambahkan data ke ListBox dan menambahkan DoEvents ke kode Anda, formulir Anda akan dicat ulang saat jendela lain diseret di atasnya. Jika Anda menghapus DoEvents dari kode, formulir Anda tidak akan mengecat ulang hingga penanganan aktivitas klik tombol selesai dijalankan. Untuk informasi selengkapnya tentang olahpesan, lihat Input Pengguna di Formulir Windows.

Tidak seperti Visual Basic 6.0, metode DoEvents tidak memanggil metode Thread.Sleep.

Biasanya, Anda menggunakan metode ini dalam perulangan untuk memproses pesan.

Caution

Memanggil metode ini menyebabkan utas saat ini ditangguhkan saat semua pesan jendela tunggu diproses. Jika pesan menyebabkan peristiwa dipicu, maka area lain dari kode aplikasi Anda dapat dijalankan. Hal ini dapat menyebabkan aplikasi Anda menunjukkan perilaku tak terduga yang sulit di-debug. Jika Anda melakukan operasi atau komputasi yang memakan waktu lama, seringkali lebih baik untuk melakukan operasi tersebut pada utas baru. Untuk informasi selengkapnya tentang pemrograman asinkron, lihat Model Pemrograman Asinkron (APM).

Berlaku untuk

Lihat juga