我有一个.NET Compact Framework应用程序,它可以在三台Windows机器(台式机窗口和两台WinCE机器)和WinCE设备上运行,即使我调用Application.Exit(),该过程也不会在退出时终止。除了.NET之外,它还使用一个COM组件(在UI线程上执行所有操作)。如果退出后进入调试器,则Visual Studio仅显示一个线程和一个完全空白的调用堆栈。
可能是什么原因造成的?
更新:我的过程正在台式机上终止,而不是WinCE计算机上。我试图用以下代码强制终止该过程,但是它不起作用:
[DllImport("coredll.dll")]
static extern int TerminateProcess(IntPtr hProcess, uint uExitCode);
static public void ExitProcess()
{
if (Platform.IsWindowsCE)
TerminateProcess(new IntPtr(-1), 0);
Application.Exit();
}
还应该有如下所示的ExitProcess()和GetCurrentProcess()API,但是如果我尝试调用它们,则会得到EntryPointNotFoundException。因此,我正在使用TerminateProcess(-1,0),因为GetCurrentProcess桌面版本的文档声称它只是返回-1。
[DllImport("coredll.dll")]
static extern int ExitProcess(IntPtr hProcess);
[DllImport("coredll.dll")]
static extern IntPtr GetCurrentProcess();
即使抛出未处理的异常也不会这样做。
更新2:导致问题的最简单程序仅创建COM对象。
static void Main()
{
new FastNavLib.MapControl();
}
使用COM组件的C++程序不会表现出此行为,因此我的C++ COM组件必须与将要调查的.NET框架有某种怪异的交互。
最佳答案
看起来您的应用程序中仍有一些线程在运行。
在退出主线程之前,请确保已终止每个子线程。
关于.net - 为什么我的程序不会终止?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1645038/