程序关不了机,Win7下可以,XP都不行
各种关机代码都试了:
1,
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0011://WM_QUERYENDSESSION
bExitApp = true;
m.Result = (IntPtr)1;
break;
default:
base.WndProc(ref m);
break;
}
}
private void FrmMsgMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (bExitApp)
{
e.Cancel = false;
this.Close();
}
else
{
e.Cancel = true;
this.Hide();
}
}
2,监控系统关机在处理也没用
SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);
Windows?XP Windows?7 C# 关机
[解决办法]
System.Diagnostics.Process.Start("shutdown", "-s -t 0");
加一句这个就好在close()里
[解决办法]
用dos命令,调用Shutdown.exe。开个进程。
[解决办法]
private void FrmMsgMain_FormClosing(object sender, FormClosingEventArgs e)
{
this.Visible = false;
if (e.CloseReason != CloseReason.WindowsShutDown)
{
e.Cancel = true;
}
}
程序发布了16个版本了,一直没解决这个问题。只要我把我们的程序退出了,才能关机
你说的第一点是不是关机时将Timer禁用掉,同时释放掉,第二点 什么是Closing事件被重新定义?
程序发布了16个版本了,一直没解决这个问题。只要我把我们的程序退出了,才能关机
我也是试了很多次,这种原因
第一:主要是要利用timer或者线程来循环检查版本或者任务计划时间之类的,然后程序运行过程中又不可能关掉线程或者停止timer计时,就会导致XP系统无法回收释放线程占用的内存,导致关机不能。
第二:启动窗体的closing事件被重新定义,就是托盘程序,一般我们都希望启动窗体又能启动托盘程序,也能在上面加空间实现某些功能,这样就需要把closing事件定义掉,这样也会造成关机不能。
一个通讯软件,基于TCP的 找了很多原因就是管不了。。
杯具了,说错了,是程序阻止了电脑关机,怎么关都不行
什么程序阻止关机?
你的程序
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0011://WM_QUERYENDSESSION
bExitApp = true;
//在这里加上销毁线程的代码
m.Result = (IntPtr)1;
break;
default:
base.WndProc(ref m);
break;
}
}
这是我第一个版本就这么写了,没用,不知道什么阻止了关机,一个不该花时间解决的问题,成了每个版本都得去解决的问题
楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()
可能比较业余,但是确实解决了。希望能帮到你。
三余
楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()
可能比较业余,但是确实解决了。希望能帮到你。
三余
楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()
可能比较业余,但是确实解决了。希望能帮到你。
佛剑大师
话说在这里认道友不太合适吧…