110,545
社区成员
发帖
与我相关
我的任务
分享
new Thread(() => Application.Run(new LoginForm())).Start();
的话,那么又增加了一倍的复杂性。此时你又在子窗体去多出来一个 UI 线程,并且这个子窗体又去创建“主窗体”,这本身就是在子窗体去依赖于主窗体。逻辑上就更乱了。
“主窗体永远不执行 Close”,这个原则保证不会有 UI 线程反复改变的问题,也只有单向依赖的逻辑关系,是最简单的模式。public bool CloseForLogin;
private void button1_Click(object sender, EventArgs e)
{
this.CloseForLogin = true;
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
//判断是否登录成功,假设登录成功,继续执行以下功能
var f = new Form1();
f.FormClosed += (s, arg) =>
{
if (f.CloseForLogin)
this.Show();
else
this.Close();
};
this.Hide();
f.Show();
}
作为应用程序主窗体,这个登录窗体不能关闭(否则进程就关闭了),而是 Hide!它监听子窗口的关闭事件,然后判断子窗体到底是要重新登录呢?还是要关闭进程。
在 Form1中,你需要自定义一个负责让宿主能检查退出原因的 bool 字段:private void button1_Click(object sender, EventArgs e)
{
this.CloseForLogin = true;
this.Close();
}
在关闭窗体之前,要设置好这个退出标志。