Вы можете попытаться отсоединить ваш обработчик событий, как только вы поймете изменение, пока не будете готовы принять больше изменений:
_automationStatusWatcher.Changed -= OnAutomationStatusChanged;
Но это не обязательно потокобезопасно, и вы все равно можете получить многократные выстрелы.
Другой вариант - использовать переменную семафора, чтобы узнать, обрабатываете ли вы это изменение:
private bool _inStatusChange = false;
private void OnAutomationStatusChanged(object sender, args...)
{
if (_inStatusChange)
{
return;
}
else
{
_inStatusChange = true;
//do work
_inStatusChange = false;
}
}
Вы должны использовать соответствующую блокировку, чтобы обеспечить безопасный доступ к переменной потока семафора.