2014-04-02 45 views
0
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形式,在這一點上...的迴應後,它會關閉frmProcessingmsgbox ...爲什麼發生這種情況...注意:frmProcessing可見作爲模式對話框...請幫我錯誤在vb.net的後臺工作

+0

是你的問題解決了嗎? – NeverHopeless

回答

0

原因是你顯示一個消息通過將要關閉的窗體,所以它會等待消息框先響應,然後關閉。如果你想關閉並生成一個消息框,那麼你應該這樣做:(我從你的要求假設是Backgroundworker屬於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