2013-07-10 13 views
1

我已經建立2個BackgroundWorkers和我的第二個BackgroundWorker的似乎不工作,我已經劃歸「私人小組BackgroundWorker2_DoWork」一個消息指示器,它被觸發,但在它的codess沒有。以下是我的BackgroundWorker的完整代碼,它有問題。有什麼是造成這種情況嗎?我的第二BackgroundWorker的將無法工作

我真的需要2個BackgroundWorkers我的程序,因爲它正在處理的文件,這使得應用程序掛起噸。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 

    Try 
     If BackgroundWorker2.IsBusy <> True Then 
      BackgroundWorker2.RunWorkerAsync() 
     End If 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

End Sub 

Private Sub BackgroundWorker2_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork 
    Dim worker1 As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker) 
    Try 
     MessageBox.Show("the program was able to open me") 
     'this message box above was able to display but the codes below were not processed 
     Dim Stream As System.IO.FileStream 

     Dim Index As Integer = 0 

     Dim openFileDialog1 As New OpenFileDialog() 
     openFileDialog1.InitialDirectory = "D:\work\base tremble" 
     openFileDialog1.Filter = "txt files (*.txt)|*.txt" 
     openFileDialog1.FilterIndex = 2 
     openFileDialog1.RestoreDirectory = True 

     If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 
      Try 
       'This line opens the file the user selected and sets the stream object 
       Stream = openFileDialog1.OpenFile() 
       If (Stream IsNot Nothing) Then 
        'create the reader here and use the stream you got from the file open dialog 
        Dim sReader As New System.IO.StreamReader(Stream) 
        Do While sReader.Peek >= 0 
         ReDim Preserve eArray(Index) 
         eArray(Index) = sReader.ReadLine 
         RichTextBox3.Text = eArray(Index) 
         Index += 1 
         worker1.ReportProgress(Index) 
         'Delay(2) 
        Loop 
        Label1.Text = "0/" & eArray.Length & "" 
       End If 
      Catch Ex As Exception 
       MessageBox.Show(Ex.Message) 
      Finally 
       If (Stream IsNot Nothing) Then 
        Stream.Close() 
       End If 
      End Try 
     End If 

    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
End Sub 

Private Sub BackgroundWorker2_ProgressChanged(sender As System.Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker2.ProgressChanged 
    Try 
     'Label1.Text = e.ProgressPercentage.ToString() 
     Me.ProgressBar2.Value = e.ProgressPercentage 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
End Sub 

Private Sub BackgroundWorker2_Completed(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker2.RunWorkerCompleted 
    Try 

    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

End Sub 
+2

您不能在工作線程中使用OpenFileDialog。 –

+0

這是否有其他選擇?當我打開一個超過100,000行的文本文件時,程序會凍結。 –

+1

當然,只能在BGW中做緩慢的事情。 OpenFileDialog不是問題。 –

回答

1

我已經sperated的OpenFileDialog到一個不同的按鈕和I處理的retreiving存儲數據的入BackgroundWorker的陣列和它的工作原理現在。

多謝您打開文件對話框的平視中的BackgroundWorker不允許它給了我一個提示。

相關問題