C# 父窗体关闭调用包含后台工作程序的子窗体

C# 父窗体关闭调用包含后台工作程序的子窗体,c#,winforms,progress-bar,backgroundworker,C#,Winforms,Progress Bar,Backgroundworker,我努力做到这一点: 我有一个主窗体,当用户单击右上角的红十字退出应用程序时,它会弹出一个进度条窗体,指示应用程序正在更新/保存信息。在进度条窗体中的后台工作程序完成后,它将关闭进度条窗体并同时关闭主窗体。 我遇到的问题是,它从一开始就关闭了main,甚至没有运行后台工作程序。如何解决这个问题?我试着用e.cancel=true,它只是给了我一个死循环 这是我的主要表格: private static void mainForm_FormClosing(object sender, FormCl

我努力做到这一点: 我有一个主窗体,当用户单击右上角的红十字退出应用程序时,它会弹出一个进度条窗体,指示应用程序正在更新/保存信息。在进度条窗体中的后台工作程序完成后,它将关闭进度条窗体并同时关闭主窗体。 我遇到的问题是,它从一开始就关闭了main,甚至没有运行后台工作程序。如何解决这个问题?我试着用e.cancel=true,它只是给了我一个死循环

这是我的主要表格:

 private static void mainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
 UpdatingForm pbar = new UpdatingForm ();


            pbar.Show();
}
在我的更新表单中:

public UpdatingForm()
        {
            InitializeComponent();

            bgWorker.RunWorkerAsync();
        }

    private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
            {
    ....
    }

private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {

            this.Close();
            // Application.Exit();
        }

也许这个代码行得通。测试一下

 private static void mainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
 UpdatingForm pbar = new UpdatingForm ();


            pbar.Show();
while (pbar.Created)
{
Application.DoEvents()
}
}


也许这个代码行得通。测试一下

 private static void mainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
 UpdatingForm pbar = new UpdatingForm ();


            pbar.Show();
while (pbar.Created)
{
Application.DoEvents()
}
}


e.Cancel
设置为
true
是正确的。但是,一旦您的
updateingform
关闭,
Application.Exit()
将再次触发
mainForm\u FormClosing()
事件,因此您将获得另一个
updateingform

private static bool isClosing = false;
private static void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (!isClosing)
    {
        isClosing = true;
        e.Cancel = true;
        UpdatingForm pbar = new UpdatingForm ();
        pbar.Show();
    }
}   

e.Cancel
设置为
true
是正确的。但是,一旦您的
updateingform
关闭,
Application.Exit()
将再次触发
mainForm\u FormClosing()
事件,因此您将获得另一个
updateingform

private static bool isClosing = false;
private static void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (!isClosing)
    {
        isClosing = true;
        e.Cancel = true;
        UpdatingForm pbar = new UpdatingForm ();
        pbar.Show();
    }
}   

你看过这篇文章了吗


你看过这篇文章了吗


获取进度条计数,如果是100%完成,则在“表单关闭”事件中关闭它,并编写必要的代码获取进度条计数,如果是100%完成,则在“表单关闭”事件中关闭它,并编写必要的代码