Существует ли способ получить уведомление об изменении даты в c#?

Есть ли способ сделать неизменяемую ссылку изменяемой?

blockquote>

Нет.

Вы могли бы написать небезопасный код Rust, чтобы заставить типы выстраиваться в линию, но код на самом деле был бы небезопасным и приводил к неопределенному поведению . Вы не хотите этого.


Для вашей конкретной проблемы см .:

9
задан Alex B 16 December 2008 в 19:50
поделиться

8 ответов

Это было бы лучше обработано при наличии запланированной задачи / задание крона, которое работает в полночь?

6
ответ дан 4 December 2019 в 15:27
поделиться

Вы могли реализовать это (по общему признанию плохо) следующим образом:

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

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

2
ответ дан 4 December 2019 в 15:27
поделиться

Вы могли бы искать Систему. Поточная обработка. Таймер. Это выстрелит в интервал, который Вы устанавливаете.

2
ответ дан 4 December 2019 в 15:27
поделиться

Система широковещательно передает сообщение WM_TIMECHANGE, когда пользователь изменяет системную дату / время. Корректный способ обработать это состоит в том, чтобы обработать то сообщение. Я подозреваю событие SystemEvents .NET. TimeChanged является просто оберткой вокруг этого.

2
ответ дан 4 December 2019 в 15:27
поделиться

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

Но я соглашаюсь, что этот сценарий был бы лучше обработан с запланированной задачей.

0
ответ дан 4 December 2019 в 15:27
поделиться

Принятие, что Вы просите, должно знать, когда пользователь изменяет date\time их ПК, единственный способ, которым я знаю, чтобы сделать, это должно контролировать EventLog, что-то вроде этого:

    static System.Diagnostics.EventLog log = new EventLog("System");

    public Form1()
    {
        log.EntryWritten += new EntryWrittenEventHandler(log_EntryWritten);
        log.EnableRaisingEvents = true;
    }

    void log_EntryWritten(object sender, EntryWrittenEventArgs e)
    {
        if (e.Entry.InstanceId == 1 && e.Entry.EntryType == EventLogEntryType.Information)
            Console.WriteLine("Test");
    }
1
ответ дан 4 December 2019 в 15:27
поделиться

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

0
ответ дан 4 December 2019 в 15:27
поделиться

Или используйте это для получения информации о DST: TimeZone. CurrentTimeZone. GetDaylightChanges (DateTime. Сегодня. Год)

0
ответ дан 4 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

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