Application.DoEvents Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Zpracovává všechny zprávy systému Windows, které jsou aktuálně ve frontě zpráv.
public:
static void DoEvents();
public static void DoEvents ();
static member DoEvents : unit -> unit
Public Shared Sub DoEvents ()
Příklady
Následující příklad kódu ukazuje použití DoEvents metody . Při spuštění příkladu může uživatel vybrat grafické soubory z objektu OpenFileDialog. Vybrané soubory se zobrazí ve formuláři. Metoda DoEvents vynutí překreslení formuláře pro každý otevřený grafický soubor. Pokud chcete spustit tento příklad, vložte následující kód do formuláře obsahujícího pojmenovaný PictureBoxPictureBox1
, pojmenovaný OpenFileDialog1
OpenFileDialog a tlačítko s názvem fileButton
.
InitializePictureBox
Volání metod a InitializeOpenFileDialog
z konstruktoru nebo Load
metody formuláře.
Poznámka
Pokud v sadě Visual Studio přidáte OpenFileDialog do formuláře pomocí operace přetažení, budete muset upravit následující InitializeOpenFileDialog
metodu odebráním řádku, který vytváří novou instanci .OpenFileDialog
Příklad také vyžaduje, aby Control.Click událost Button ovládacího prvku a událost objektu FileOkOpenFileDialog byly připojeny k obslužné rutině události definované v příkladu. Když je příklad spuštěný, zobrazte dialogové okno kliknutím na tlačítko.
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
Poznámky
Když spustíte formulář windows, vytvoří nový formulář, který pak čeká na zpracování událostí. Pokaždé, když formulář zpracuje událost, zpracuje veškerý kód přidružený k této události. Všechny ostatní události čekají ve frontě. Zatímco váš kód zpracovává událost, vaše aplikace nereaguje. Okno se například nepřekreslí, pokud je v horní části přetaženo jiné okno.
Pokud voláte DoEvents v kódu, vaše aplikace dokáže zpracovat ostatní události. Pokud máte například formulář, který přidává data do objektu ListBox a přidává DoEvents do kódu, překreslí se, když přes něj přetáhnete jiné okno. Pokud odeberete DoEvents z kódu, formulář nebude překreslovat, dokud obslužná rutina události kliknutí tlačítka nedokončí provádění. Další informace o zasílání zpráv najdete v tématu Vstup uživatele v model Windows Forms.
Na rozdíl od jazyka Visual Basic 6.0 DoEvents metoda nevolá metodu Thread.Sleep .
Tuto metodu obvykle používáte ve smyčce ke zpracování zpráv.
Upozornění
Volání této metody způsobí aktuální vlákno být pozastavena při zpracování všech zpráv čekající okno. Pokud zpráva způsobí aktivaci události, můžou se spustit jiné oblasti kódu aplikace. To může způsobit, že aplikace vykazuje neočekávané chování, které je obtížné ladit. Pokud provádíte operace nebo výpočty, které trvá dlouhou dobu, je často vhodnější tyto operace provádět v novém vlákně. Další informace o asynchronním programování najdete v tématu Asynchronní programovací model (APM).