我有一个.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/

10-11 23:22
查看更多