BackgroundWorker 클래스를 사용 하면 별도 전용 스레드에서 작업을 실행할 수 있습니다. 다운로드 및 데이터베이스 트랜잭션과 같은 시간이 많이 걸리는 작업은 사용자 인터페이스 (UI) 실행 하 고 응답을 멈춘 것 처럼 보일 수 발생할 수 있습니다. 이러한 작업으로 인 한 지연이 길어지는 경우 및 응답성이 뛰어난 UI를 구성할 때의 BackgroundWorker 클래스는 편리 하 게 솔루션을 제공 합니다.
시간이 많이 걸리는 작업을 백그라운드에서를 실행 하려면 만들기를 BackgroundWorker 작업이 완료 되 면 신호 확인 하 고 작업의 진행률을 보고 하는 이벤트를 수신 합니다. 만들 수 있습니다는 BackgroundWorker 프로그래밍 방식으로에서 폼으로 끌어 놓을 수 있습니다 합니다 구성 요소 탭의 도구 상자. 만드는 경우는 BackgroundWorker Windows Forms 디자이너에서 구성 요소 트레이에 표시 됩니다 하 고 해당 속성이 속성 창에 표시 됩니다.
백그라운드 작업에 대 한 설정에 대 한 이벤트 처리기를 추가 합니다 DoWork 이벤트입니다. 이 이벤트 처리기에서 시간이 오래 걸리는 작업을 호출 합니다. 작업을 시작 하려면 호출 RunWorkerAsync합니다. 진행률 업데이트의 알림을 받으려면 처리는 ProgressChanged 이벤트입니다. 작업이 완료 될 때 알림을 받으려면 처리는 RunWorkerCompleted 이벤트입니다.
Background Worker 속성
BackgroundWorker 이벤트
예제
다음 코드 예제는 기본 사항을 보여줍니다는 BackgroundWorker 시간이 많이 걸리는 작업을 비동기적으로 실행 하기 위한 클래스입니다. 다음 그림에서는 출력의 예를 보여 줍니다.
이 코드를 실행 하려면 Windows Forms 애플리케이션을 작성 합니다. 추가 Label 라는 컨트롤 resultLabel 두 개의 추가 Button 컨트롤 이라는 startAsyncButton 및 cancelAsyncButton합니다. 만들 Click 두 단추에 대 한 이벤트 처리기입니다. 구성 요소 탭 도구 상자의 추가 BackgroundWorker 라는 구성 요소 backgroundWorker1합니다. 만들 DoWork, ProgressChanged, 및 RunWorkerCompleted 에 대 한 이벤트 처리기는 BackgroundWorker합니다. 폼의 코드에서 기존 코드를 다음 코드로 바꿉니다.
Imports System.Windows.Forms
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
BackgroundWorker1.WorkerReportsProgress = True
BackgroundWorker1.WorkerSupportsCancellation = True
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If BackgroundWorker1.IsBusy <> True Then
' 백그라운드 스레드 시작
BackgroundWorker1.RunWorkerAsync()
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If BackgroundWorker1.WorkerSupportsCancellation = True Then
' 백그라운드 스레드 취소
BackgroundWorker1.CancelAsync()
End If
End Sub
'스레드 동작 구문
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim worker As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker)
Dim i As Integer
For i = 1 To 10 Step i + 1
If worker.CancellationPending = True Then
e.Cancel = True
Exit For
Else
' Perform a time consuming operation and report progress.
System.Threading.Thread.Sleep(500)
worker.ReportProgress(i * 10)
End If
Next
End Sub
'라벨 디스플레이 업데이트
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
resultLabel.Text = (e.ProgressPercentage.ToString() + "%")
End Sub
'백그라운드 워커 컨트롤 상태 표시
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
If e.Cancelled = True Then
resultLabel.Text = "Canceled!"
ElseIf Not e.Error Is Nothing Then
resultLabel.Text = "Error: " + e.Error.Message
Else
resultLabel.Text = "Done!"
End If
End Sub
End Class
[C#] 백그라운드 스레드(BackGround Worker Class)
'VB.NET Programming' 카테고리의 다른 글
[VBNET] 레지스트리(Registry) Create & Delete & Read & Write (0) | 2019.09.23 |
---|---|
[VBNET] 객체 직렬화 및 파일로 저장, 불러오기( Serialization) (0) | 2019.09.20 |
[VBNET] 크로스 스레드 (Cross Thread) 예제 (0) | 2019.09.16 |
[VBNET] 델리 게이트 (Delegate) - 델리게이트란? , 선언 방법과 간단한 예제 (0) | 2019.09.13 |
[VBNET] 프로젝트(Project) 내 폼(Form) 목록 리스트(List) 읽기 및 폼(Form) 찾기 (0) | 2019.09.09 |