C# 应用程序取消关闭
我的一个应用程序出现问题,它似乎取消了关闭或重新启动我的计算机。 我想这是因为我捕获了表单关闭事件,并按如下方式取消它:C# 应用程序取消关闭,c#,.net,c#-4.0,C#,.net,C# 4.0,我的一个应用程序出现问题,它似乎取消了关闭或重新启动我的计算机。 我想这是因为我捕获了表单关闭事件,并按如下方式取消它: private void Main_FormClosing(object sender, FormClosingEventArgs e) { if (!AllowApplicationClose) { e.Cancel = true; this.WindowState = FormWindowState.Minimized;
private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
if (!AllowApplicationClose)
{
e.Cancel = true;
this.WindowState = FormWindowState.Minimized;
}
}
我这样做是为了使关闭按钮最小化到任务栏。我确实希望能够在不退出应用程序的情况下重新启动。有更好的方法吗?还是一种知道windows是否正在关闭应用程序的方法
编辑:谢谢你的回答。对不起,我只能选一个正确的,我只选了最上面的一个。再次感谢 检查事件参数的属性,如果是windowshutdown
或TaskManagerClosing
,则不执行任何操作,请先检查;仅在用户启动时取消:CloseReason.UserClosing
请参见此处,了解您可以使用的其他值:您可以使用它来检测表单是否被用户关闭或更好(在您的情况下)当系统试图注销或关闭/重新启动时,使用-class获取事件,以便在最小化应用程序时也可以关闭应用程序。使用线程计时器过程,然后使用下面的过程分别关闭windows进程
public void Computer_Shutdown()
{
if (this.checkBox.Checked)
{
System.Diagnostics.Process[] processes =
System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process
processParent in processes)
{
System.Diagnostics.Process[] processNames =
System.Diagnostics.Process.
GetProcessesByName
(processParent.ProcessName);
foreach (System.Diagnostics.Process
processChild in processNames)
{
try
{
System.IntPtr hWnd =
processChild.MainWindowHandle;
if (IsIconic(hWnd))
{
ShowWindowAsync(hWnd, SW_RESTORE);
}
SetForegroundWindow(hWnd);
if (!(processChild.
MainWindowTitle.Equals(this.Text)))
{
processChild.CloseMainWindow();
processChild.Kill();
processChild.WaitForExit();
}
}
catch (System.Exception exception)
{
}
}
}
}
这将结束过程,我不认为这是原始海报(OP)想要做的。他对windows关闭时不取消关闭应用程序感兴趣。