У меня есть программное обеспечение, которое манипулирует текстом в буфере обмена 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()
к вызову кнопки, и он по-прежнему работает нормально, когда событие перестало срабатывать.
Моя теория состоит в том, что из-за странного способа он может вызывать себячто-то идет не так и не добавляет событие снова.Кажется, я не могу заблокировать функцию, используя объект блокировки или логическое значение.Любые идеи о том, что может пойти не так?
Редактировать: я создал другую программу с тем же даже, который учитывает только изменения в буфере обмена.Кажется, что он работает нормально бесконечно, поэтому проблема определенно вызвана событием, вызывающим его «я».Мне нужен надежный способ приостановить даже когда он выполняется.