C# 处理退出窗口时,处理假死状态,在线等

xx314250548 2011-10-21 10:45:09
Main01.Close();
Application.ExitThread();//执行到这时,程序被挂起,在什么什么情况下会发生
Application.Exit();
GC.Collect();
System.Diagnostics.Process.GetCurrentProcess().Kill();
...全文
235 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xx314250548 2011-10-26
  • 打赏
  • 举报
回复
问题解决了,原来是调用的DLL不对,新的窗口启动出现了问题,谢谢各位
xx314250548 2011-10-25
  • 打赏
  • 举报
回复
窗口的隐藏和设置窗口解决不了。查了相关资料,说Application.ExitThread要其它线程退出后,才能被退出,这里可能是有线程被占用。或是当前线程正在使用。所以无法执行。
xx314250548 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 gama456 的回复:]
System.Diagnostics.Process[] pss = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process ps in pss)
{
if (ps.ProcessName == "WindowsFormsApplication1")//Hz_Server
{
tag++;
ps.Kill();
}
}
[/Quote]

不知道为什么杀不掉
gama456 2011-10-25
  • 打赏
  • 举报
回复

System.Diagnostics.Process[] pss = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process ps in pss)
{
if (ps.ProcessName == "WindowsFormsApplication1")//Hz_Server
{
tag++;
ps.Kill();
}
}
gama456 2011-10-25
  • 打赏
  • 举报
回复
直接把他KILL 掉
xx314250548 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 7楼 chopper7278的回复:]
将自动更新的线程改为后台线程
默认情况下Thread是前台线程 就是IsBackground=false 前台线程未退出,进程就不会终止。
你的主程序线程就是一个前台线程 所以自然要等你那个自动更新的线程(默认是前台)结束才会结束 所以会看到假死现象
而后台线程则相反,不会等所有前台线程结束才会结束的。
把你的自动更新线程改为IsBackground=true 就可以了
[/Quote]
已经是后台线程了
二号匪 2011-10-24
  • 打赏
  • 举报
回复
form1.visible=false;
然后再加上你那些个代码;
然后可能会过几分钟或更长才能完全释放掉内存
前提是你的程序最终会自己关掉
zdzcool 2011-10-24
  • 打赏
  • 举报
回复
把这几句挨个的隐藏试试,看时哪句出的问题。

如果已经是额外的线程,应该不会出现假死啊。
xx314250548 2011-10-21
  • 打赏
  • 举报
回复
[Quote=1 congplayer 的回复:]
处理假死最好用线程做
[/Quote]

这里只是想关闭现的资源,启动新的窗体。
congplayer 2011-10-21
  • 打赏
  • 举报
回复
处理假死最好用线程做
快乐乔巴 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xx314250548 的回复:]

这里主要是退出自动更新程序,然后启动主程序,然而自动更新程序假死中,也就不能退出,就无法进入下一步操作
[/Quote]

将自动更新的线程改为后台线程
默认情况下Thread是前台线程 就是IsBackground=false 前台线程未退出,进程就不会终止。
你的主程序线程就是一个前台线程 所以自然要等你那个自动更新的线程(默认是前台)结束才会结束 所以会看到假死现象
而后台线程则相反,不会等所有前台线程结束才会结束的。
把你的自动更新线程改为IsBackground=true 就可以了
萧炎 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 xx314250548 的回复:]
Main01.Close();
Application.ExitThread();//执行到这时,程序被挂起,在什么什么情况下会发生
Application.Exit();
GC.Collect();
System.Diagnostics.Process.GetCurrentProcess().Kill();
[/Quote]
程序退出前会发生
xx314250548 2011-10-21
  • 打赏
  • 举报
回复
这里主要是退出自动更新程序,然后启动主程序,然而自动更新程序假死中,也就不能退出,就无法进入下一步操作
sjfbtnmcn 2011-10-21
  • 打赏
  • 举报
回复
直接退出,会假死么
Bullatus 2011-10-21
  • 打赏
  • 举报
回复
可以不去理假死,因为你此处已经打算退出程序了。
可以先将窗口隐藏,然后再进行关闭

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧