Bagikan melalui


Application.DoEvents Metode

Definisi

Memproses semua pesan Windows yang saat ini ada 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 memaksa DoEvents pengecatan ulang formulir untuk setiap file grafis yang dibuka. Untuk menjalankan contoh ini, tempelkan kode berikut dalam formulir yang berisi bernama PictureBox1, bernama OpenFileDialogOpenFileDialog1, dan tombol bernama fileButton.PictureBox InitializePictureBox Panggil metode dan InitializeOpenFileDialog dari konstruktor atau Load metode formulir.

Catatan

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

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 dicat 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 ke atasnya. Jika Anda menghapus DoEvents dari kode, formulir Anda tidak akan dicat ulang hingga penanganan aktivitas klik tombol selesai dieksekusi. Untuk informasi selengkapnya tentang olahpesan, lihat Input Pengguna di Formulir Windows.

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

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

Perhatian

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

Berlaku untuk

Lihat juga