У меня есть приложение .NET Compact Framework, которое может работать на трех машинах Windows (настольные окна и две машины WinCE) и на устройствах WinCE, процесс никогда не заканчивается при выходе, даже если я вызываю Application.Exit(). Помимо .NET, он использует один COM-компонент (который делает все в потоке пользовательского интерфейса). Если я выйду из отладчика после выхода, 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();
}
C++, которые используют COM-компонент не проявляют такое поведения, поэтому мой C++ COM компонент должен иметь какое-то причудливое взаимодействие с платформой .NET, который я буду исследовать.
Возможно, что-то попробовать, когда мои приложения на C++ не прекращаются (что происходит раздражающе часто), но .NET-приложениям не нужно это требовать. – Qwertie
Как вы делаете аварийный дамп и отлаживаете его, и почему это будет лучше, чем использование отладчика VS? – Qwertie
http://support.microsoft.com/kb/241215 – psychotik