Выдавание исключения в методе обратного вызова для Таймеров

Это характерно для проекта C#, но я игнорирую эти файлы/каталоги:

  • *.csproj.user
  • /obj/*
  • /bin/*
  • *.ncb
  • *.suo

у меня нет проблем при выполнении кода в складе на других машинах после того, как я проигнорирую все эти файлы. Самый легкий способ узнать, что необходимо сохранить, состоит в том, чтобы сделать копию папки и начать удалять вещи, Вы думаете, не необходимы. Продолжайте пытаться создать, и, пока можно создать, успешно продолжают удалять. Если Вы удаляете слишком много, копируете его с исходной папки.

В конце у Вас будет хороший каталог полным единственных файлов, которые должны фиксироваться.

32
задан Kornelije Petak 11 November 2009 в 22:42
поделиться

2 ответа

Исключение не передается обратно в вызывающий поток. Если вы хотите, чтобы это было так, вы можете добавить блок catch и выяснить, как сигнализировать вызывающему потоку. Если вызывающий поток является потоком пользовательского интерфейса WinForms или WPF, вы можете использовать класс SynchronizationContext для передачи вызова потоку пользовательского интерфейса. В противном случае вы можете использовать потокобезопасную очередь (или синхронизирующую блокировку) и периодически проверять ее в другом потоке.

System.Timers.Timer будет молча поглощать исключения и продолжать работу таймера (хотя это зависит от изменение в будущих версиях фреймворка); System.Threading.Timer завершит работу программы.

35
ответ дан 27 November 2019 в 21:08
поделиться

Я не знаю, какой вариант лучше, но когда я использую таймер обратного вызова, я обычно генерирую исключения и позволяю им всплывать в основной подпрограмме обратного вызова, где я обрабатываю их изящно. Поток продолжает работать по таймеру, как и должно.

Необработанные исключения в потоке (System.Threading.Timer) останавливают всю вашу программу.

1
ответ дан 27 November 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: