剪贴板监视事件停止触发

时间:2018-10-08 12:25:25

标签: c# windows clipboard

我有一些在Windows剪贴板上处理文本的软件。具体来说,它将从剪贴板文本的开头删除下划线_(并返回字符),然后检查其余文本是否为URL。如果是,则不带下划线的URL存储在剪贴板上,否则保留原始文本。为了监视剪贴板中的更改,我使用了DBKK提供的this question答案中的代码。它可以正常工作,但是会在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(),并且在事件停止触发后仍然可以正常工作。

我的理论是,由于它调用自己的方法很怪异,所以出现了问题,不再添加该事件。我似乎无法使用锁定对象或布尔值来锁定功能。对可能出什么问题有任何想法吗?

编辑: 我创建了另一个程序,即使只计算剪贴板的更改也是如此。它似乎可以无限期运行,因此问题肯定是由事件本身引起的。我需要一种健壮的方法来在执行时暂停偶数。

0 个答案:

没有答案