我正在编写一个小型实用程序来监视我的剪贴板。这目前工作得很好,但一位朋友告诉我,它会在剪贴板更改时随机停止显示警报,并且重新启动可以修复它。
我无法重现,但最终我自己遇到了它 - 应用程序已停止接收WM_DRAWCLIPBOARD
事件。
如何判断我的应用程序何时已从侦听器链中删除?
这是剪贴板侦听器链的危害之一:一个错误的应用程序可能会损坏链。而不是使用SetClipboardViewer
函数,使用AddClipboardFormatListener
which就没有这个问题。
如果您正在调试使用 SetClipboardViewer 的应用程序并且应用程序崩溃,或者您在调试器中停止应用程序,或以其他方式绕过剪贴板链的恢复,Windows 中的性能会下降,以至于看似无关的功能Windows(例如 Alt-Tab 或恢复最小化窗口)停止工作。如果您重新启动 Windows,它们会回来。
以这种方式将自身插入剪贴板链的应用程序应在主窗体的 Dispose 期间或在另一个适当的时间调用 ChangeClipboardChain,以避免此问题。如果您在调试器中停止应用程序,则不会调用 Dispose。
我还没有尝试过 AddClipboardFormatListener;我第一次听说它;我将尝试它,看看我是否可以在调试时避免我自己的应用程序中的问题。