我试图实现这个目标: 我有主窗体,当用户单击右上角的红叉以退出应用程序时,会弹出一个进度条表单,指示应用程序正在更新/保存信息。进度条表单中的后台工作程序完成后,它将关闭进度条表单并关闭主表单。 我遇到的问题是,它甚至没有运行后台工作程序就从第一个关闭了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();
}
答案 0 :(得分:1)
将e.Cancel
设置为true
是正确的。但是,一旦您UpdatingForm
关闭,Application.Exit()
再次触发mainForm_FormClosing()
事件,您就会再获得一个UpdatingForm
等。
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();
}
}
答案 1 :(得分:0)
也许这段代码有效。测试
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.IsDisposed)
{
Application.DoEvents()
}
}
答案 2 :(得分:0)