当前位置:  开发笔记 > 编程语言 > 正文

重启PC时,C#.Net exe不会关闭,导致机器不能重启

如何解决《重启PC时,C#.Netexe不会关闭,导致机器不能重启》经验,为你挑选了3个好方法。

我们有一个内置在C#中的SmartClient,当它正在重新启动运行的PC时,它仍然保持打开状态.这将暂停重新启动过程,除非用户首先关闭SmartClient或进行其他一些手动干预.

当基础架构团队远程安装需要重新启动计算机的新软件时,这会导致问题.

让SmartClient应用程序从Windows识别关闭/重启事件并优雅地自杀的任何想法?

更新: 这是一个具有多个gui线程的高度线程化应用程序.是的,多个gui线程.它实际上是许多项目的整合,它们本身可以是独立的应用程序 - 所有这些都是从单个exe启动和管理的,这些exe集中了这些管理方法并跟踪这些线程.我不相信使用后台线程是一种选择.



1> Catalin DICU..:

它必须是一个继续运行的线程,阻止您的应用程序关闭.如果您正在使用线程,则可以将其设置为背景.

线程是后台线程或前台线程.后台线程与前台线程相同,除了后台线程不会阻止进程终止.一旦属于进程的所有前台线程终止,公共语言运行库就结束该进程.任何剩余的后台线程都会停止并且不会完成.

http://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground.aspx



2> Vincent McNa..:

好的,如果您有权访问该应用程序,则可以处理SessionEnded事件.

...
Microsoft.Win32.SystemEvents.SessionEnded +=new
  Microsoft.Win32.SessionEndedEventHandler(shutdownHandler);

...

private void shutdownHandler(object sender, Microsoft.Win32.SessionEndedEventArgs e) {
  // Do stuff
}



3> liggett78..:

当用户注销或Windows正在关闭时,WM_QUERYENDSESSION消息将发送到所有顶级窗口.请在此处查看MSDN文档.

响应此消息的WinForm应用程序的默认行为是FormClosing使用CloseReason == WindowsShutDown或其他方式触发事件.事件处理程序虽然可以选择顽固并拒绝关闭应用程序,从而保持系统运行.

检查FormClosing应用程序的处理程序.也许那里有东西.我已经看过几次这种东西了.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有