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