vb.net的后台工作者出错

时间:2014-04-02 11:03:55

标签: vb.net multithreading backgroundworker

Dim isValidUser as Boolean   ' Global variable

Private Sub backgroundWorker1_DoWork( _
ByVal sender As Object, _
ByVal e As DoWorkEventArgs) _
Handles backgroundWorker1.DoWork

    isValidUser = CheckInDataBase(Username,Pass)

End Sub  

Private Sub backgroundWorker1_RunWorkerCompleted( _
ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) _
Handles backgroundWorker1.RunWorkerCompleted

       frmProcessing.Close()          

       If isValidUser then
             msgbox("Welcom")
       else 
             msgbox("Invalid Pswd")
       End IF
End Sub

RunWorkerCompleted方法frmProcessing.close()中,此时frmProcessing表单未关闭...它会在回复frmProcessing后关闭msgbox。 ..为什么会发生这种情况...注意:frmProcessing可以作为模态对话框显示...请帮助我

1 个答案:

答案 0 :(得分:0)

原因是您在要关闭的表单上显示一条消息,因此它将等待消息框首先响应然后它将关闭。如果你想关闭并生成一个消息框,那么你应该这样做:(我假设你的要求是背景工作者属于frmProcessing形式)

FrmMain代码:(假设这是frmProcessing)的所有者形式

Dim frmProcessing as new SomeProcessingFormName()

If (frmProcessing.ShowDialog() = DialogResult.OK) Then
      msgbox("Welcom")
   Else 
      msgbox("Invalid Pswd")
End If

FrmProcessing代码:

Public isValidUser as Boolean ' Global variable OR make it a property

Private Sub backgroundWorker1_DoWork( _ ByVal sender As Object, _ ByVal e As DoWorkEventArgs) _ Handles backgroundWorker1.DoWork

isValidUser = CheckInDataBase(Username,Pass)

End Sub

Private Sub backgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) Handles backgroundWorker1.RunWorkerCompleted

   frmProcessing.Close()          

   If isValidUser then
         Me.DialogResult = DialogResult.Ok
   else 
         Me.DialogResult = DialogResult.Cancel
   End If

End Sub