gpt4 book ai didi

.net - 为什么我的程序不会终止?

转载 作者:行者123 更新时间:2023-12-02 09:00:26 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com