我为我的登录表单创建了一个加载窗口,我使用BackgroundWorker来制作一个平滑的加载动画,但是如果我使用ShowDialog()
Show()
的{{1}},则加载窗口会保留在屏幕上,并且程序什么都不做。造成这种情况的原因是什么?
这里我调用BackgroundWorker,然后显示加载页面:
private void loginButton_Click(object sender, EventArgs e) {
loadscr.Show();
LoginBV.RunWorkerAsync();
}
在这里我关闭加载窗口:
private void LoginBV_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
loadscr.Close();
//and show the MainWindow, etc.
}
DoWork(BackgroundWorker)代码:
private void LoginBV_DoWork(object sender, DoWorkEventArgs e) {
NameValueCollection POST = new NameValueCollection();
POST["username"] = ipbUN.Text;
POST["password"] = ipbPASS.Text;
POST["pin"] = ipbPIN.Text;
POST["csoport"] = "user";
var action = Program.startPOST<DataObj>("http://localhost/system/winapi.php?do=userlogin", POST);
finish["sessionkey"] = action.sessionkey;
finish["status"] = Convert.ToString(action.status);
}
答案 0 :(得分:5)
请参阅MSDN article on ShowDialog
。
“您可以使用此方法在您的帐户中显示模式对话框 应用。调用此方法时,后面的代码不是 执行直到对话框关闭后。“
使用模态对话框(ShowDialog
)会停止执行后面的代码,直到有人/某人解除对话框为止。它会“暂停”你的程序。后台工作程序永远不会运行,因为您在调用ShowDialog
后启动它。