System.DateTime и кэширование TimeZoneInfo и CultureInfo - PullRequest
2 голосов
/ 06 мая 2011

У меня есть два отдельных приложения .NET, один сервер и другой WinForms.В приложении WinForms работают часы, показывающие текущее время из DateTime.Now.Серверное приложение может изменить TimeZone коробки.Мне нужно уведомить приложение WinForms о том, что TimeZone изменился, чтобы элемент управления Clock мог очистить кэш и показать правильное время.Я могу отправить ему сообщение, но я ищу стандартный способ, как это делается в Windows.Какой лучший подход?Регистрирует ли сообщение в обоих и следит ли за ним в WndProc?

Ответы [ 2 ]

2 голосов
/ 07 мая 2011

Хорошо, так что я собираюсь ответить на свой собственный вопрос, поскольку он был конкретно о системных событиях, а предыдущий ответ дал хорошее, но общее решение. По сути, я обнаружил, что существует класс Microsoft.Win32.SystemEvents, который имеет событие TimeChanged. Все, что вам нужно сделать в вашем приложении, это сделать что-то вроде следующего:

SystemEvents.TimeChanged += (s, e) =>
        {
            CultureInfo.CurrentCulture.ClearCachedData();
            TimeZoneInfo.ClearCachedData();
        };

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

0 голосов
/ 06 мая 2011

Поскольку они оба являются приложениями .NET, я рекомендую использовать коммуникационную технологию, такую ​​как Windows Communication Foundation , для обеспечения связи между приложениями.

Ваш сервер настроит ServiceHost, который ваши приложения WinForms будут иметь прокси для службы, которую вы настроили.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...