Надежный таймер в консольном приложении

Причины, почему селекторы на основе id не работают

  1. Элемент / DOM с указанным идентификатором еще не существует.
  2. Элемент существует, но он не является зарегистрированный в DOM [в случае, если HTML-узлы динамически добавляются из ответов Ajax].
  3. Присутствует более одного элемента с тем же идентификатором, который вызывает конфликт.

Решения

  1. Попробуйте получить доступ к элементу после его объявления или, альтернативно, использовать такие вещи, как $(document).ready();
  2. . Для элементов, исходящих из ответов Ajax, используйте метод .bind() для jQuery. В старых версиях jQuery для этого было .live().
  3. Используйте инструменты [например, плагин webdeveloper для браузеров], чтобы найти дубликаты идентификаторов и удалить их.
93
задан Ijas Ameenudeen 20 January 2019 в 13:50
поделиться

2 ответа

Можно использовать что-то как Console.ReadLine() для блокирования основного потока, таким образом, другие фоновые потоки (как потоки таймера) будут все еще работать. Можно также использовать AutoResetEvent для блокирования выполнения, тогда (когда Вам нужно к), можно назвать Набор () методом на том, которому AutoResetEvent возражают для выпуска основного потока. Также удостоверьтесь, что Ваша ссылка на Объект - таймер не выходит из объема и собрала "мусор".

54
ответ дан Paul Fleming 24 November 2019 в 06:21
поделиться

Рассмотрите использование ManualResetEvent для блокирования основного потока в конце его обработки и вызова Reset() на нем, как только обработка таймера закончилась. Если это - что-то, что должно постоянно работать, рассмотреть перемещение этого в сервисный процесс вместо консольного приложения.

17
ответ дан Paul Fleming 24 November 2019 в 06:21
поделиться