C# 使用BackgroundWorker的请求似乎从未完成

C# 使用BackgroundWorker的请求似乎从未完成,c#,backgroundworker,C#,Backgroundworker,我为我的登录表单创建了一个加载窗口,我使用BackgroundWorker制作了一个平滑的加载动画,但是如果我使用ShowDialog()而不是Show(),加载窗口将保持在屏幕上,而程序什么也不做。这是什么原因造成的 在这里,我调用BackgroundWorker并显示加载页面: private void loginButton_Click(object sender, EventArgs e) { loadscr.Show(); LoginBV.RunWorkerAsync(

我为我的登录表单创建了一个加载窗口,我使用BackgroundWorker制作了一个平滑的加载动画,但是如果我使用
ShowDialog()
而不是
Show()
,加载窗口将保持在屏幕上,而程序什么也不做。这是什么原因造成的

在这里,我调用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\u DoWork(对象发送方,DoWorkEventArgs e){
NameValueCollection POST=新的NameValueCollection();
POST[“username”]=ipbUN.Text;
POST[“password”]=ipbPASS.Text;
POST[“pin”]=ipbPIN.Text;
POST[“csoport”]=“用户”;
var action=Program.startPOST(“http://localhost/system/winapi.php?do=userlogin“,员额);
finish[“sessionkey”]=action.sessionkey;
finish[“status”]=Convert.ToString(action.status);
}
请参阅

“您可以使用此方法在对话框中显示模式对话框 当调用此方法时,它后面的代码不可用 直到对话框关闭后执行。“


使用模式对话框(
ShowDialog
)会停止随后代码的执行,直到有人/有人取消该对话框。它会“暂停”你的程序。后台工作程序永远不会运行,因为您在调用
ShowDialog

之后启动了它。事实上,我交换了这两行代码,现在它工作正常,谢谢。
    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);
    }