我在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 :(得分:0)
你可以这样做
if (frmProcessing.ShowDialog() == DialogResult.OK)
{
BackWorker.RunWorkerAsync()
}
无需关闭ProgressChanged
方法
答案 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't
是Progress_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
。