В моем приложении WPF у меня есть системные часы, которые используются для отображения текущего времени.Он основан на System.Timers.Timer
.
Код выглядит следующим образом:
У меня есть закрытый член в классе:
private System.Timers.Timer _timer;
В конструкторе класса:
_timer = new System.Timers.Timer(1000);
_timer.AutoReset = false;
_timer.Elapsed += TickClock;
_timer.Start();
Прошедший метод выглядит следующим образом:
private void TickClock(object sender, ElapsedEventArgs e)
{
UiInvokeIfNecessary.Invoke(() =>
{
header_clock.Text = DateTime.Now.ToLongTimeString();
});
_timer.Start();
}
Когда UiInvokeIfNecessary.Invoke
вызывает код в Диспетчере пользовательского интерфейса .
public static void Invoke(Action action)
{
if (Application.Current == null)
{
action();
return;
}
if (Application.Current.Dispatcher.CheckAccess())
action();
else
{
Application.Current.Dispatcher.Invoke(action, DispatcherPriority.Send);
}
}
TextBlock
header_clock
в пользовательском интерфейсе выглядит следующим образом:
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" x:Name="header_clock"
Height="30" FontSize="21" Text="00:00:00" Margin="5,0,0,0" />
После нескольких минут работы системы происходит странная вещь: часы замирают (часы не двигаются вперед).Я думаю, что поток пользовательского интерфейса занят, но все в пользовательском интерфейсе (кроме часов) работает отлично (навигация между экраном, нажатие кнопок и т. Д.).Похоже, что поток пользовательского интерфейса свободен.
В чем может быть проблема?