BackgroundWorker 예제
*
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Control.CheckForIllegalCrossThreadCalls = False

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For i = 0 To 100
Label1.Text = i
BackgroundWorker1.ReportProgress(i)
System.Threading.Thread.Sleep(100)
Label1.Refresh()

If BackgroundWorker1.CancellationPending = True Then
Label1.Text = "Cancel"
Exit Sub
End If

Next
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
Label1.Text = "success"
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
BackgroundWorker1.CancelAsync()
End Sub
End Class

 

동작중 cancel 버튼 추가 했습니다

 

 

 

 

이 게시물을

댓글'1'

Control.CheckForIllegalCrossThreadCalls 속성


컨트롤의 작성 스레드 이외의 스레드가 해당 컨트롤의 메서드 또는 속성 중 하나에 액세스하려고 하면 종종 예상치 못한 결과가 발생합니다. 일반적인 잘못된 스레드 작업은 컨트롤의 Handle 속성에 액세스하는 잘못된 스레드에 대한 호출입니다. 디버깅하는 동안 이러한 스레드 작업을 보다 쉽게 찾아서 진단하려면 CheckForIllegalCrossThreadCalls를 true로 설정합니다.

이 댓글을

공유하기

SEARCH

MENU NAVIGATION