日期:2014-05-18  浏览次数:20855 次

如何在C#程序的 线程 中,执行关机动作?
在一个用C#开发的win form程序中,启动了通信线程A,在 A 中启动了另一个工作线程 B。
而在线程 B 的代码中,适当时候需要执行关机动作。

请教多线程达人,几个问题:

1.C#中执行关机动作,是否不能再向 VC6中那样,直接call API:ExitWindowsEx()进行?如果可以call API,在vs2008中,如何引用API所在的DLL?

2.搜到的其他方法,如 “Process.Start("shutdown","/s /t 0");”或者Call WMI接口,再或者引用相关DLL,call API,各有什么利弊?

3.执行关机,是否需要先把本程序中的所有线程杀死,释放资源?

4.本例的多线程环境下,在线程B中,能否直接使用这些方法?还是得在线程B中设置 Event,通知主线程中的event handler执行?有无类似event/handler的sample?

谢谢!大家周末愉快!


------解决方案--------------------
2这个方法很简单。

api麻烦点,你还需要先获取权限。
------解决方案--------------------
回答:
问题1:API的正确引用方法是,先找到API所在的那个系统文件xx.dll,再类似[dllimport xx.dll]的方法引用。详细的写法网上很多。
问题2:没具体研究过,说不太好,只能泛泛地说说我的看法:既然你是在用C#.net编程,那么就应该采用微软封装好了的、提倡的方法,诸如“Process.Start("shutdown","/s /t 0");”之类的;如果不怕麻烦,API之类的功能往往更强大,老程序员爱用。
问题3:“你自己先杀死相关的线程,清理好用过的资源,而不要交给windows去做”,这虽然不是必须的,但是却是个值得推崇的好习惯。
问题4:“在线程B中设置 Event,通知主线程中的event handler执行”,逻辑上更严密,更安全。
希望我的回答能对你有益。