Приложение C # с использованием Windows API Code Pack Shell Extension не будет закрыто - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть приложение на C #, которое использует Microsoft Windows API Code Pack - в частности, расширения оболочки, которые я использую для мониторинга устройств хранения и вставки и удаления носителей.

Однако, когда я пытаюсь закрытьПриложение в Visual C # 2010 (Express) Затем я должен вручную остановить отладчик.Похоже, что фоновый цикл в Win API Code Pack все еще работает, даже когда я вручную избавляюсь от ShellObjectWatcher.Единственный способ убить его - это вручную остановить отладчик.

Приложение встроено в WPF.

В итоге VisC # 2010 перестает пытаться запустить приложение в отладчике.Вы говорите, чтобы начать отладку, а это просто не так.Единственный способ возобновить работу - это убить приложение с помощью диспетчера задач, а затем завершить работу VC # 2010 - выпить кофе - и снова запустить его.Странный.Я подозреваю, что есть скрытый процесс или окно, висящее вокруг, которое не закрывается, когда я пытаюсь очистить приложение.

Есть идеи, как я могу немного более эффективно очистить этот ShellObjectWatcher?

Ответы [ 3 ]

2 голосов
/ 25 мая 2013

Чтобы исправить ошибку в проекте Code Pack Shell, добавьте одну строку в MessageListener.WndProc():

case (uint)WindowMessage.Destr​oy:
 **_running = false;**
 break;

Теперь ThreadMethod() выйдет из цикла сообщений.

1 голос
/ 17 февраля 2012

ОК, используя System.Environment.Exit(0); исправляет эту проблему.Приложение закрывается, и отладчик освобождает управление.В этом случае работает грубая сила.

0 голосов
/ 10 декабря 2013

Я столкнулся с той же проблемой, но решил ее, установив поток в качестве фонового потока (то есть, он останавливается, когда приложение останавливается):

в MessageListener.cs, в конструкторе, в строке 40, у меня есть:

_windowThread = new Thread(ThreadMethod);
// The line below will force the thread to terminate when the app exits.
_windowThread.IsBackground = true;
_windowThread.SetApartmentState(ApartmentState.STA);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...