c# - 剪贴板监控事件停止触发
问题描述
我有一些软件可以处理 Windows 剪贴板上的文本。具体来说,它将删除_
剪贴板文本前面的下划线(并返回字符),然后检查剩余文本是否为 URL。如果是,则将不带下划线的 URL 存储在剪贴板上,否则保留原始文本。为了监视剪贴板的更改,我使用了 DBKK 提供的这个问题的答案中的代码。它工作正常,但会在 5 分钟到 24 小时之间的任何时间后随机停止工作。
以下是在剪贴板事件触发器上调用的代码:
private void clipboardMonitor_ClipboardChanged(object sender, ClipboardAssist.ClipboardChangedEventArgs e)
{
lock(lockVar)
{
if (locked)
{
return;
}
else
{
locked = true;
//this.clipboardMonitor.ClipboardChanged -= new System.EventHandler<ClipboardAssist.ClipboardChangedEventArgs>(this.clipboardMonitor_ClipboardChanged);
count++;
label1.Text = count.ToString();
removeUnderscore();
//this.clipboardMonitor.ClipboardChanged += new System.EventHandler<ClipboardAssist.ClipboardChangedEventArgs>(this.clipboardMonitor_ClipboardChanged);
locked = false;
}
}
}
我添加了各种调试代码。首先是计数器,这让我意识到当我写回剪贴板时它会再次触发事件。我添加了取消设置然后设置事件的两行,因此修改剪贴板不会在它运行时再次调用该事件。我还添加了代码,如果它没有完成上一次运行(if(lock)
部分),它将阻止事件运行。最终,事件停止触发(可以通过未递增的计数器看出)。这绝对是事件的问题,我添加removeUnderscore()
了一个按钮调用,当事件停止触发时它仍然可以正常工作。
我的理论是,由于它可以调用自己的奇怪方式,出现问题并且不再添加事件。我似乎无法使用锁定对象或布尔值锁定函数。关于可能出现问题的任何想法?
编辑:我创建了另一个程序,即使它只计算剪贴板更改。它似乎无限期地运行良好,所以问题肯定是由调用它自己的事件引起的。我需要一种强大的方法来在它执行时暂停它。
解决方案
推荐阅读
- java - 从 Selenium 中的 URL 获取部分数据
- c++ - QT C++ 在关闭应用程序时防止运行时错误
- python - h2o 分布式随机森林最大特征参数
- hadoop - Hive 上小文件的性能问题
- ruby-on-rails-4 - 没有这样的键:从 Poltergeist 迁移到 Selenium 后进入
- javascript - 未处理的承诺拒绝警告:错误:发送后无法设置标头
- jquery - 传递给插件时函数未定义
- angular - 我去另一条路线后没有加载ngif
- python - 使用 Python 和 Flask 上传到 Google Drive 时文件大小为零
- python - Codeanywhere Python3 容器没有 Python3