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