使用BackgroundWorker的请求似乎永远不会完成

mba*_*987 2 c# backgroundworker

我为我的登录表单创建了一个加载窗口,我使用BackgroundWorker来制作一个平滑的加载动画,但是如果我使用ShowDialog()insted Show(),加载窗口会保留在屏幕上,程序什么都不做.是什么导致了这个?

在这里,我调用BackgroundWorker,然后显示Loading页面:

private void loginButton_Click(object sender, EventArgs e) {
    loadscr.Show();
    LoginBV.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)

在这里我关闭加载窗口:

private void LoginBV_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
    loadscr.Close();
    //and show the MainWindow, etc.
}
Run Code Online (Sandbox Code Playgroud)

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);
    }
Run Code Online (Sandbox Code Playgroud)

edd*_*cat 5

请参阅MSDN文章ShowDialog.

"您可以使用此方法在应用程序中显示模式对话框.调用此方法时,直到关闭对话框后才会执行后面的代码."

使用模态对话框(ShowDialog)会停止执行后面的代码,直到某些人/某人解除对话框为止.它会"暂停"你的程序.后台工作程序永远不会运行,因为您在调用后启动它ShowDialog.