我在Background Worker中遇到了一些麻烦

时间:2014-04-02 02:47:13

标签: vb.net backgroundworker

我在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 .....

2 个答案:

答案 0 :(得分:0)

你可以这样做

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

无需关闭ProgressChanged方法

中的frmProcessing

答案 1 :(得分: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