如果我从任务管理器执行end-task,我有一个运行该线程的应用程序 应用程序正在退出但是,在进程列表中将运行一个实例(即,如果我执行5次最终任务5次进程运行)。这可能是由于线程。
在这种情况下,如果我必须杀死所有进程,我需要重启设备: - (。
手动,如果我退出它很有效。如何克服这个问题?
我正在c#中开发应用程序
答案 0 :(得分:4)
正如elder_george指出的那样,你有一个流氓线程阻止应用程序退出,你需要确保在你的应用程序关闭时该线程退出。使用CF 3.5,您通常可以将IsBackground属性设置为truw,尽管这并不总是足够的。如果线程在系统调用中阻塞(如WaitOne之类的无限等待),则线程将无法获取调度,但仍可能无法终止。
最佳方法可以防止这种情况,这是一种很好的做法,就是实际编写代码来指示您的工作线程将自己关闭。这通常通过重置事件或线程定期检查的布尔标志来完成。
void MyThreadProc()
{
// set this event when the app is shutting down
while(!shutdownEvet.WaitOne(0, false))
{
// do my thread stuff
}
}
此机制也适用于CF 2.0(其中IsBackground不存在)。
答案 1 :(得分:1)
将线程上的IsBackground属性设置为true。
答案 2 :(得分:0)
嘿,我得到了解决方案,
当我从任务管理器执行结束任务时,控件将出现在“Application.Run()”方法旁边。 在那里我们可以调用一个用户定义的函数,因为我们可以执行所有必要的任务,比如查杀线程,清理内存等等。顺利结束应用程序。
感谢您的回复。