Application.DoEvents メソッド

定義

メッセージ キューに現在ある Windows メッセージをすべて処理します。Processes all Windows messages currently in the message queue.

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

次のコード例は、メソッドの使用方法を示して DoEvents います。The following code example demonstrates using the DoEvents method. この例を実行すると、ユーザーはからグラフィックスファイルを選択でき OpenFileDialog ます。When the example runs, a user can select graphics files from an OpenFileDialog. 選択したファイルがフォームに表示されます。The selected files are displayed in the form. メソッドは、 DoEvents 開かれた各グラフィックスファイルのフォームを強制的に再描画します。The DoEvents method forces a repaint of the form for each graphics file opened. この例を実行するには、という名前の、名前付きの、およびという名前のボタンを含むフォームに次のコードを貼り付け PictureBox PictureBox1 OpenFileDialog OpenFileDialog1 fileButton ます。To run this example, paste the following code in a form containing a PictureBox named PictureBox1, an OpenFileDialog named OpenFileDialog1, and a button named fileButton. InitializePictureBox InitializeOpenFileDialog フォームのコンストラクターまたはメソッドからおよびメソッドを呼び出し Load ます。Call the InitializePictureBox and InitializeOpenFileDialog methods from the form's constructor or Load method.

注意

Visual Studio でドラッグ操作を使用してをフォームに追加する場合は、 OpenFileDialog InitializeOpenFileDialog の新しいインスタンスを作成する行を削除することによって、次のメソッドを変更する必要があり OpenFileDialog ます。In Visual Studio, if you add an OpenFileDialog to your form by using a drag operation, you will have to modify the following InitializeOpenFileDialog method by removing the line that creates a new instance of OpenFileDialog.

また、この例では、 Control.Click コントロールのイベントとのイベントが、この Button FileOk OpenFileDialog 例で定義されているイベントハンドラーに接続されている必要があります。The example also requires that the Control.Click event of the Button control and the FileOk event of the OpenFileDialog are connected to the event handlers defined in the example. この例が実行されている場合は、ボタンをクリックしてダイアログボックスを表示します。When the example is running, display the dialog box by clicking the button.

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

注釈

Windows フォームを実行すると、新しいフォームが作成され、イベントが処理されるまで待機します。When you run a Windows Form, it creates the new form, which then waits for events to handle. フォームがイベントを処理するたびに、そのイベントに関連付けられているすべてのコードが処理されます。Each time the form handles an event, it processes all the code associated with that event. 他のすべてのイベントは、キューで待機します。All other events wait in the queue. コードによってイベントが処理されても、アプリケーションは応答しません。While your code handles the event, your application does not respond. たとえば、別のウィンドウが上にドラッグされている場合、ウィンドウは再描画されません。For example, the window does not repaint if another window is dragged on top.

コードでを呼び出すと DoEvents 、アプリケーションは他のイベントを処理できます。If you call DoEvents in your code, your application can handle the other events. たとえば、にデータを追加してコードに追加するフォームがある場合、 ListBox DoEvents 別のウィンドウをドラッグするとフォームが再描画されます。For example, if you have a form that adds data to a ListBox and add DoEvents to your code, your form repaints when another window is dragged over it. コードからを削除した場合 DoEvents 、ボタンのクリックイベントハンドラーの実行が完了するまでフォームは再描画されません。If you remove DoEvents from your code, your form will not repaint until the click event handler of the button is finished executing. メッセージングの詳細については、「 Windows フォームでのユーザー入力」を参照してください。For more information on messaging, see User Input in Windows Forms.

Visual Basic 6.0 とは異なり、 DoEvents メソッドはメソッドを呼び出しません Thread.SleepUnlike Visual Basic 6.0, the DoEvents method does not call the Thread.Sleep method.

通常、このメソッドをループで使用してメッセージを処理します。Typically, you use this method in a loop to process messages.

注意事項

このメソッドを呼び出すと、待機中のすべてのウィンドウメッセージが処理されている間、現在のスレッドが中断されます。Calling this method causes the current thread to be suspended while all waiting window messages are processed. メッセージによってイベントがトリガーされる場合は、アプリケーションコードの他の領域が実行される可能性があります。If a message causes an event to be triggered, then other areas of your application code may execute. これにより、アプリケーションで予期しない動作が発生し、デバッグが困難になる可能性があります。This can cause your application to exhibit unexpected behaviors that are difficult to debug. 長い時間がかかる操作や計算を実行する場合は、新しいスレッドでこれらの操作を実行することをお勧めします。If you perform operations or computations that take a long time, it is often preferable to perform those operations on a new thread. 非同期プログラミングの詳細については、「 非同期プログラミングモデル (APM)」を参照してください。For more information about asynchronous programming, see Asynchronous Programming Model (APM).

適用対象

こちらもご覧ください