我遇到了一个似乎取消关闭或重新启动计算机的应用程序的问题。 我认为这是因为我捕获了表格结束事件并取消了它:
private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
if (!AllowApplicationClose)
{
e.Cancel = true;
this.WindowState = FormWindowState.Minimized;
}
}
我这样做,以便关闭按钮最小化到任务栏。我确实希望能够在不退出应用程序的情况下重新启动。有一个更好的方法吗?或者一种了解Windows是否正在关闭应用程序的方法?
编辑:谢谢你的回答。对不起,我只能选择一个正确的,我只是选择了一个。再次感谢!答案 0 :(得分:2)
先检查e.CloseReason
;仅在用户启动时取消:CloseReason.UserClosing
。
请点击此处查看您可以使用的其他值:CloseReason (MSDN)
答案 1 :(得分:2)
您可以使用CloseReason
来检测用户是否正在关闭表单,或者更好(在您的情况下)使用SystemEvents
- 类来在系统尝试注销时获取事件或者关机/重启,这样你也可以在应用程序最小化时关闭它。
答案 2 :(得分:1)
检查事件参数的CloseReason
,如果它是WindowsShutDown
或TaskManagerClosing
则不执行任何操作。
答案 3 :(得分:0)
使用线程计时器程序,然后使用以下程序分别关闭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)
{
}
}
}
}