Application.DoEvents Metódus

Definíció

Feldolgozza az üzenetsorban jelenleg Windows üzeneteket.

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

Példák

Az alábbi példakód a DoEvents metódus használatát mutatja be. A példa futtatásakor a felhasználó kiválaszthat grafikus fájlokat egy OpenFileDialogadott fájlból. A kijelölt fájlok megjelennek az űrlapon. A DoEvents metódus minden megnyitott grafikus fájlhoz újrafesti az űrlapot. A példa futtatásához illessze be a következő kódot egy PictureBox elnevezett PictureBox1, egy OpenFileDialog elnevezett OpenFileDialog1és egy gombot fileButtontartalmazó űrlapba. Hívja meg az InitializePictureBoxInitializeOpenFileDialog űrlap konstruktorának vagy Load metódusának metódusát és metódusát.

Note

Ha Visual Studio egy OpenFileDialog vesz fel az űrlapra húzási művelettel, az alábbi InitializeOpenFileDialog metódust kell módosítania a OpenFileDialog új példányát létrehozó sor eltávolításával.

A példához az is szükséges, hogy a Control.ClickButton vezérlő eseménye és eseménye FileOkOpenFileDialog a példában meghatározott eseménykezelőkhöz legyen csatlakoztatva. Amikor a példa fut, a gombra kattintva jelenítse meg a párbeszédpanelt.

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

Megjegyzések

Amikor egy Windows űrlapot futtat, az létrehozza az új űrlapot, amely ezután megvárja az események kezelését. Minden alkalommal, amikor az űrlap egy eseményt kezel, feldolgozza az eseményhez társított összes kódot. Az összes többi esemény várakozik az üzenetsorban. Bár a kód kezeli az eseményt, az alkalmazás nem válaszol. Az ablak például nem lesz újrafestve, ha egy másik ablak van felülre húzva.

Ha meghívja DoEvents a kódot, az alkalmazás képes kezelni a többi eseményt. Ha például olyan űrlapja van, amely adatokat ad hozzá a ListBox kódhoz, és hozzáadja DoEvents a kódot, az űrlap újrafesti, amikor egy másik ablak húzódik rajta. Ha eltávolítja DoEvents a kódot, az űrlap nem lesz újrafestve, amíg a gomb kattintási eseménykezelője nem fejeződik be. További információ az üzenetkezelésről: Felhasználói bemenet Windows Forms.

A 6.0-s Visual Basic ellentétben a DoEvents metódus nem hívja meg a Thread.Sleep metódust.

Általában ezt a módszert használja egy hurokban az üzenetek feldolgozásához.

Figyelmeztetés

Ennek a metódusnak a meghívása miatt az aktuális szál fel lesz függesztve az összes várakozási ablak üzenetének feldolgozása közben. Ha egy üzenet eseményt vált ki, akkor az alkalmazáskód más területei is végrehajthatók. Ez azt okozhatja, hogy az alkalmazás váratlan viselkedést mutat, amelyeket nehéz hibakeresésre végezni. Ha hosszú ideig tartó műveleteket vagy számításokat hajt végre, gyakran célszerű ezeket a műveleteket egy új szálon végrehajtani. Az aszinkron programozásról további információt az Aszinkron programozási modell (APM) című témakörben talál.

A következőre érvényes:

Lásd még