Application.DoEvents Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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).