【发布时间】:2014-10-09 20:03:48
【问题描述】:
场景:我正在制作一个登录表单,它连接到 MySQL 数据库以确认帐户和密码。
尝试:我试图在表单连接并从数据库获取结果时显示动画加载 gif 和加载文本。
到目前为止做了:所以我使用了后台工作人员: 登录按钮:
Private Sub LoginBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LoginBtn.Click
PictureBox2.Visible = True
Label6.Visible = True
BackgroundWorker1.RunWorkerAsync()
End Sub
后台工作人员 DoWork:
Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
AccessControl()
End Sub
Private Sub AccessControl()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf AccessControl))
Else
con.Open()
Dim user, pass As String
user = UserNameBox.Text
pass = Crypt(PasswordBox.Text)
cmd = New MySqlCommand("SELECT * FROM users WHERE Name ='" + user + "' And Password ='" + pass + "'", con)
dr = cmd.ExecuteReader
End If
End Sub
后台 RunWorkerCompleted:
Private Sub backgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
If (dr.Read()) Then
FadingForm()
Else
PictureBox2.Visible = False
Label6.Visible = False
WrnPnl.Visible = True
WrnLbl.Visible = True
WrnPnlImg.Visible = True
PasswordBox.Text = ""
UserNameBox.Text = ""
UserNameBox.Focus()
End If
con.Close()
End Sub
应该发生什么:当用户单击登录按钮输入凭据后,动画加载 gif 和加载文本应该出现并且后台进程应该启动,如果凭据正确,则应该触发 FadingForm(),否则else 部分应该。
问题:问题是当我在输入正确的凭据后按下登录按钮时,加载的 gif 和文本会显示,但表单会冻结。该过程完成后,主窗体恢复正常。我确信表单会冻结,因为动画 gif 停止动画并且没有控件可用。我不知道可能是什么原因或如何解决。
任何帮助将不胜感激。非常感谢!
【问题讨论】:
标签: vb.net multithreading backgroundworker