C#Winform关闭程序后进程仍在Windows任务列表管理器上
为什么关闭程序后进程仍在Windows任务列表管理器上 我使用login Form.csC#Winform关闭程序后进程仍在Windows任务列表管理器上,c#,winforms,login,kill-process,C#,Winforms,Login,Kill Process,为什么关闭程序后进程仍在Windows任务列表管理器上 我使用login Form.cs [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Login());
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
}
用户成功登录后,我重定向到另一个母版页
this.Hide();
Main_Usr oMainUsr = new Main_Usr();
oMainUsr.Visible = true;
我的伪母版页如下所示:
public Main_Usr()
{
InitializeComponent();
this.IsMdiContainer = true;
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var l = new Login();
l.ShowDialog();
if(l.Passed)
Application.Run(new Login());
}
关闭母版页时,进程仍在Windows任务列表管理器中。
但当我关闭登录页面时,它会终止Windows任务列表管理器上的进程
这是不是因为我只是隐藏了登录页面?
我必须关闭所有窗口才能真正退出/终止进程吗
提前谢谢你,
Stev因为
登录
是应用程序关闭的最后一种形式,所以只有在这之后才能加载主用户
——即使登录
被隐藏,它实际上仍然在那里。默认情况下,Windows窗体应用程序配置为在最后一个窗体关闭时退出。因为登录
是要关闭的应用程序的最后一个窗体,因此您只能在此之后加载主用户
,即使登录
被隐藏,它实际上仍然在那里。默认情况下,Windows窗体应用程序配置为在最后一个窗体关闭时退出。这是因为应用程序消息循环与您的登录
窗体关联(应用程序.Run(new Login())
执行此操作),因此您需要关闭启动应用程序的窗体以结束此过程
或者,您也可以在
应用程序之前调用LoginForm.Show()
,运行,将凭据存储在某个位置,然后调用应用程序.Run(新的Main\u Usr)
这是因为应用程序消息循环与您的登录
表单相关联(应用程序.Run(新登录())
执行此操作),因此,您需要关闭启动应用程序的表单以结束流程
或者,您可以在应用程序之前调用LoginForm.Show()
,运行,将凭据存储在某个位置,然后调用应用程序。运行(新主应用程序)
不会弄坏窗户的
所以它仍然是隐藏的,而这个过程仍然保存在内存中。
this.Close()关闭窗口并从内存中删除其对象
最好这样做:
public Main_Usr()
{
InitializeComponent();
this.IsMdiContainer = true;
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var l = new Login();
l.ShowDialog();
if(l.Passed)
Application.Run(new Login());
}
并在登录窗口内实现传递的属性
顺便问一下,里面有多线程吗?
这是此类错误的另一个来源
不会弄坏窗户的
所以它仍然是隐藏的,而这个过程仍然保存在内存中。
this.Close()关闭窗口并从内存中删除其对象
最好这样做:
public Main_Usr()
{
InitializeComponent();
this.IsMdiContainer = true;
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var l = new Login();
l.ShowDialog();
if(l.Passed)
Application.Run(new Login());
}
并在登录窗口内实现传递的属性
顺便问一下,里面有多线程吗?
这是此类错误的另一个来源。在winforms中,当主应用程序窗体关闭时,进程将被终止。主申请表是application.Run call中指定的申请表。在您的情况下,它是登录表单:
Application.Run(new Login());
要关闭表单,您应该调用close
方法。当您调用Hide
或将Visibility
设置为false时,表单将保留在内存中。它只是对用户隐藏起来
因此,为了实现所需的功能,您应该将主申请表更改为main_Usr:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Main_Usr()); // change main form
}
然后订阅主用户表单的Load
事件。在事件处理程序中,执行以下操作:
private void Main_User_Load(object sender, EventArgs e)
{
using (var loginForm = new Login())
{
Hide(); // hide main form
if (loginForm.ShowDialog() != System.Windows.Forms.DialogResult.OK)
{
Close(); // close main form and kill process
return;
}
Show(); // show main form if user logged in successfully
}
}
更新:您可以在Main方法中完成此操作,如下所示
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using(var loginForm = new Login())
if (loginForm.ShowDialog() != System.Windows.Forms.DialogResult.OK)
return;
Application.Run(new Main_Usr()); // change main form
}
但通常我不会隐藏主窗体并在登录窗体下面显示它。因此,在这种情况下,您应该使用Load
事件处理程序。这取决于你
顺便说一句,winforms中没有母版页和页面。这些都是针对ASP.NET的。这里有表格:)
当主应用程序关闭时,也应考虑WordFrm进程中的Login通知、MyFrm等。< /P> < P>。主申请表是application.Run call中指定的申请表。在您的情况下,它是登录表单:
Application.Run(new Login());
要关闭表单,您应该调用close
方法。当您调用Hide
或将Visibility
设置为false时,表单将保留在内存中。它只是对用户隐藏起来
因此,为了实现所需的功能,您应该将主申请表更改为main_Usr:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Main_Usr()); // change main form
}
然后订阅主用户表单的Load
事件。在事件处理程序中,执行以下操作:
private void Main_User_Load(object sender, EventArgs e)
{
using (var loginForm = new Login())
{
Hide(); // hide main form
if (loginForm.ShowDialog() != System.Windows.Forms.DialogResult.OK)
{
Close(); // close main form and kill process
return;
}
Show(); // show main form if user logged in successfully
}
}
更新:您可以在Main方法中完成此操作,如下所示
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using(var loginForm = new Login())
if (loginForm.ShowDialog() != System.Windows.Forms.DialogResult.OK)
return;
Application.Run(new Main_Usr()); // change main form
}
但通常我不会隐藏主窗体并在登录窗体下面显示它。因此,在这种情况下,您应该使用Load
事件处理程序。这取决于你
顺便说一句,winforms中没有母版页和页面。这些都是针对ASP.NET的。这里有表格:)
也可以考虑命名为Login,MyFrm等。 < P>我发现了,我只使用diZLo.< /P>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Login oLogin = new Login();
oLogin.ShowDialog();
Application.Run(new Main_Usr());
}
我找到了,我只是用了dizlog
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Login oLogin = new Login();
oLogin.ShowDialog();
Application.Run(new Main_Usr());
}
我遵循@lazyberezovsky代码,并将其添加到我的Login.cs中
private void simpleButton_Valider_Click(object sender, EventArgs e)
{
.....
DialogResult = DialogResult.OK;
return;
.....
}
我遵循@lazyberezovsky代码,并将其添加到我的Login.cs中
private void simpleButton_Valider_Click(object sender, EventArgs e)
{
.....
DialogResult = DialogResult.OK;
return;
.....
}
您只需要关闭登录表单(注意:表单不是页面)您只需要关闭登录表单(注意:表单不是页面)谢谢您的回答。”[StatThread]静态void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Login-ogin=new-Login();ogin.Show();Application.Run(new-Main_-Usr());}“但它会在登录程序之前打开主页。看看lazyberezovsky的答案,特别是在更新部分,这里有一段if代码,说明应该如何操作。谢谢你的回答。”[StatThread]静态void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Login-ogin=new-Login();ogin.Show();Application.Run(new-Main_-Usr());}但它会在登录程序之前打开主页查看lazyberezovsky的答案,特别是在更新部分,有一段if代码,说明应该如何操作。感谢您的回答,