2

我有一个使用 Microsoft Windows API 代码包的 C# 应用程序 - 特别是 Shell 扩展,我用它来监视存储设备和媒体插入和移除。

但是,当我尝试在 Visual C# 2010 (Express) 中关闭应用程序时,我必须手动停止调试器。即使我手动处理了 ShellObjectWatcher,Win API 代码包中似乎仍有一个后台循环仍在运行。我可以杀死它的唯一方法是手动停止调试器。

该应用程序内置于 WPF 中。

最终,VisC#2010 放弃了尝试在调试器下运行应用程序。你告诉它开始调试,它只是没有。让它再次运行的唯一方法是使用任务管理器终止应用程序,然后关闭 VC#2010 - 去喝杯咖啡 - 然后重新启动它。奇怪的。我怀疑有一个隐藏的进程或窗口在我尝试清理应用程序时没有被关闭。

知道如何更有效地清理这个 ShellObjectWatcher 吗?

4

3 回答 3

2

要修复 Code Pack Shell 项目中的错误,请在​中添加一行MessageListener.WndProc()

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

现在ThreadMethod()将退出消息循环。

于 2013-05-24T20:25:03.367 回答
1

确定使用System.Environment.Exit(0);修复了这个问题。应用程序关闭,调试器释放控制权。蛮力在这种情况下起作用。

于 2012-02-17T07:45:22.077 回答
0

我遇到了同样的问题,但通过将线程设置为后台线程来解决它(意思是,当应用程序停止时它被杀死):

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);
于 2013-12-10T13:09:33.757 回答