Application.DoEvents 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
현재 메시지 큐에 있는 모든 Windows 메시지를 처리합니다.
public:
static void DoEvents();
public static void DoEvents ();
static member DoEvents : unit -> unit
Public Shared Sub DoEvents ()
예제
다음 코드 예제는 DoEvents 메서드. 예제가 실행되면 사용자는 에서 OpenFileDialog그래픽 파일을 선택할 수 있습니다. 선택한 파일이 양식에 표시됩니다. 메서드는 DoEvents 열려 있는 각 그래픽 파일의 폼을 강제로 다시 칠합니다. 이 예제를 실행하려면 라는 , 명명OpenFileDialog1
된 및 OpenFileDialog 라는 PictureBox1
단추fileButton
가 포함된 PictureBox 양식에 다음 코드를 붙여넣습니다. 폼의 InitializePictureBox
생성자 또는 Load
메서드에서 및 InitializeOpenFileDialog
메서드를 호출합니다.
참고
Visual Studio에서 끌기 작업을 사용하여 폼에 을 OpenFileDialog 추가하는 경우 의 새 instance OpenFileDialog만드는 줄을 제거하여 다음 InitializeOpenFileDialog
메서드를 수정해야 합니다.
또한 이 예제에서는 Control.Click 컨트롤의 Button 이벤트와 FileOk 의 OpenFileDialog 이벤트가 예제에 정의된 이벤트 처리기에 연결되어야 합니다. 예제가 실행 중이면 단추를 클릭하여 대화 상자를 표시합니다.
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 Form을 실행하면 새 양식이 만들어집니다. 그러면 이벤트가 처리되기를 기다립니다. 폼이 이벤트를 처리할 때마다 해당 이벤트와 연결된 모든 코드를 처리합니다. 다른 모든 이벤트는 큐에서 대기합니다. 코드에서 이벤트를 처리 하는 동안 애플리케이션이 응답 하지 않습니다. 예를 들어 다른 창을 위쪽으로 끌면 창이 다시 그려지지 않습니다.
호출 하는 경우 DoEvents 애플리케이션 코드에서 다른 이벤트를 처리할 수 있습니다. 예를 들어 에 데이터를 추가하고 코드에 ListBox 추가하는 DoEvents 양식이 있는 경우 다른 창을 끌면 양식이 다시 그려집니다. 코드에서 제거 DoEvents 하면 단추의 클릭 이벤트 처리기 실행이 완료될 때까지 양식이 다시 그려지지 않습니다. 메시징에 대한 자세한 내용은 Windows Forms 사용자 입력을 참조하세요.
Visual Basic 6.0과 달리 메서드는 DoEvents 메서드를 Thread.Sleep 호출하지 않습니다.
일반적으로 루프에서 이 메서드를 사용하여 메시지를 처리합니다.
주의
이 메서드를 호출하면 모든 대기 창 메시지가 처리되는 동안 현재 스레드가 일시 중단됩니다. 트리거되지 이벤트가 발생 하는 메시지를 애플리케이션 코드의 다른 영역 실행할 수 있습니다. 이 인해 애플리케이션의 디버그 하기 어려운 예기치 않은 동작이 발생할 수 있습니다. 시간이 오래 걸리는 작업 또는 계산을 수행하는 경우 새 스레드에서 이러한 작업을 수행하는 것이 좋습니다. 비동기 프로그래밍에 대한 자세한 내용은 APM(비동기 프로그래밍 모델)을 참조하세요.
적용 대상
추가 정보
.NET