我有登录窗口。从这个登录窗口,我正在初始化主窗口。 登录成功后,我关闭登录窗口。 现在我有另外两个窗口,我从主窗口调用。 一旦我关闭主窗口,我就可以关闭另外两个窗口以及主窗口。 但程序仍在内存中运行。我必须从Visual Studio手动关闭它。 我该如何完全关闭程序的所有实例? 这是主窗口关闭事件代码。
private void usimClose(object sender, EventArgs e)
{
newScreen2.Close();
newScreen3.Close();
this.Close();
}
这是我的登录窗口代码。一旦用户点击提交按钮。
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
if (txtUserName.Text.Length == 0)
{
errormessage.Text = "Please Enter UserName";
txtUserName.Focus();
}
else
{
LoginStatus _status = _Login.LoginUsimgClient(txtUserName.Text, txtPassword.Password.ToString());
if (_status.BoolLoginstatus)
{
mainWindow.RunApplication();
string struserName = _status.StringUserFirstName;
mainWindow.userName.Text = "Welcome " + struserName;
mainWindow.Show();
this.Close();
}
else
{
errormessage.Text = _status.StringErrorDescription;
txtUserName.Text = String.Empty;
txtPassword.Password = String.Empty;
}
}
}
答案 0 :(得分:6)
尝试Application.Current.Shutdown();
来自MSDN
显式调用Shutdown导致应用程序关闭, 无论ShutdownMode设置如何。但是,如果ShutdownMode是 设置为OnExplicitShutdown,您必须调用Shutdown来关闭 应用
重要提示
调用Shutdown时,应用程序将无关地关闭 是否取消任何打开窗口的Closing事件。
此方法只能从创建该方法的线程中调用 申请对象。
答案 1 :(得分:4)
您可以使用此
关闭所有窗口App.Current.Shutdown();
或
你可以手动关闭它
Window parentwin = Window.GetWindow();
parentwin.Close();
答案 2 :(得分:2)
如果您的起点是您的MainWindow,那么就从那里开始。
首先,在您的MainWindow中托管LoginForm,并使用ShowDialog()显示它以强制用户与LoginForm交互。将成功/不成功交互的结果返回给MainForm。
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
var form = new LoginForm();
var result = form.ShowDialog();
if (result ?? false)
{
// Carry on opening up other windows
}
else
{
// Show some kind of error message to the user and shut down
}
}
否则,从技术上讲,您的LoginForm正在托管您的MainForm,坦率地说,这是奇怪的。
答案 3 :(得分:1)
在这里查看我的答案:How to close wpf window from another project
Application.Current.Shutdown()将以非常突然的方式停止应用程序。
最好是优雅地跟踪窗口并关闭它们。