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