2014-04-02 69 views
0

我在vb.net中創建了一個登錄表單(frmLogin)。登錄時,我顯示處理對話框(frmProcessing.ShowDialog)。當用戶點擊登錄按鈕時,它會在我顯示處理對話框的後臺工作中檢查數據庫用戶是否可用。檢查數據庫後,我需要關閉這個處理對話框,然後我想顯示「welcome msgbox」。所有工作都很好,問題是,顯示mesbox時處理對話框也在運行。我不能關閉它,請幫助我.....在此先感謝我在後臺工作人員中遇到了一些麻煩

我的代碼.....

登錄()

frmProcessing.ShowDialog() 

BackWorker.RunWorkerAsync() 

末登錄

的DoWork()

IF CheckInDataBase(Username,Pass) then  'checking user available or not 
     BackWorker.ReportProgress(0)  'Here i need to show welcome msgbox 
Else 
     BackWorker.ReportProgress(1)  'Here i need to show invalid pswd msgbox 
End IF 

末的DoWork

ProgressChanged()

frmProcessing.close()   'This code does not work 

    If e.ProgressPercentage=0 then 

     msgbox("Welcom") 

    elseif e.ProgressPercentage=1 then 

     msgbox("Invalid Pswd") 
    End IF 

末ProcessChanged

當我顯示「歡迎/無效PSWD MSGBOX」的處理對話框(frmProcessing)也運行在後臺,我需要先關閉它,然後想顯示MSGBOX .....

回答

0

這會導致問題的部分似乎是在以下部分:

frmProcessing.close()   'This code does not work 

    If e.ProgressPercentage=0 then 

     msgbox("Welcom") 

    elseif e.ProgressPercentage=1 then 

     msgbox("Invalid Pswd") 
    End IF 

這段代碼shouldn'tProgress_Changed事件的一部分。 BackgroundWorker支持另一個委託功能RunWorkerCompleted,後臺進程完成後UI的任何更改都應在此委託中完成。

所以,你的代碼應該是這樣的:

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 

注:MSGBOX是一個VB6的風格。改爲使用MessageBox.Show

0

你可以做如下

if (frmProcessing.ShowDialog() == DialogResult.OK) 
{ 
    BackWorker.RunWorkerAsync() 
} 

無需關閉frmProcessing在ProgressChanged方法

相關問題