1
MDI 응용 프로그램에서 BackgroundWorker를 사용하여 파일을 FTP 서버에 업로드하고 진행률 표시 줄에 진행률을 표시하는 프로세스를 처리하려고합니다.MDI 응용 프로그램의 BackgroundWorker
단순한 창과 하나의 버튼으로 개념 증명 응용 프로그램을 사용하려고했을 때 제대로 작동했습니다. 그러나 내 실제 응용 프로그램에서 그것을하려고 할 때 - doWork 하위가 실행되지 않습니다. 대신 그것은 즉시 RunWorkerCompleted 서브를 실행하고 실제 작업을 수행하지 않고 "Upload complete"를 보여줍니다.
BackgroundWorker가 일반 창 응용 프로그램과 같은 방식으로 실행되지 못하도록하는 MDI가 있습니까? 당신의 도움에 미리
감사
코드 :
당신이 가장 가능성이 예외를 보내고로 RunWorkerCompleted 이벤트 e.Error를 확인해야Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
bWorker.RunWorkerAsync()
End Sub
Private Sub bWorker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bWorker.DoWork
Dim source = Application.StartupPath + "\Db\test.mdb"
Dim NameToUpload As String = Path.GetFileName(source)
NameToUpload = NameToUpload.Replace(".", DateTime.Now.ToShortTimeString() + ".")
Dim request As FtpWebRequest = DirectCast(WebRequest.Create(Host + "/" + txtLogin.Text + "/" + NameToUpload), FtpWebRequest)
request.Method = WebRequestMethods.Ftp.UploadFile
request.Credentials = New NetworkCredential(txtLogin.Text, txtPassword.Text)
Dim FileStream() As Byte = File.ReadAllBytes(source)
Dim requestStream As System.IO.Stream = request.GetRequestStream()
For offset As Integer = 0 To FileStream.Length Step 1024
bWorker.ReportProgress(CType(offset * ProgressBar1.Maximum/FileStream.Length, Integer))
Dim chSize As Integer = FileStream.Length - offset
If chSize > 1024 Then chSize = 1024
requestStream.Write(FileStream, offset, chSize)
Next
requestStream.Close()
requestStream.Dispose()
End Sub
Private Sub bWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs)
ProgressBar1.Value = e.ProgressPercentage
End Sub
Private Sub bWorker_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs)
MsgBox("Upload complete")
End Sub
그래서 'bWorker_DoWork' 이벤트에 중단 점을 설정하면 충돌이 발생하지 않습니까? 또 다른 메모에서 백그라운드 작업자의 UI 스레드에 액세스하려고 시도해서는 안되며이 값을 작업 이벤트에 전달해야합니다. UI를 업데이트하지 않기 때문에 문제가되지 않을 수도 있지만, 배경 작업자가 UI와 다른 스레드이므로 여전히 좋은 습관입니다. – Codexer