namespace PizzaSoftware.UI
{
/// <summary>
/// Interaction logic for LoginForm.xaml
/// </summary>
public partial class LoginForm : Window
{
public LoginForm()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Timer timer = new Timer(1000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
lblCurrentTime.Content = DateTime.Now.ToShortTimeString();
}
}
}
基本上,我只是想在我的表单上设置一个显示当前时间的标签。我在另一个问题中建议使用Timer。
我收到了标题中的错误。我该怎么做才能解决这个问题?
答案 0 :(得分:17)
嗯,最简单的方法是使用DispatcherTimer
- 它将在调度程序线程中触发其Tick
事件:
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(1000);
timer.IsEnabled = true;
timer.Tick += timer_Elapsed;
或者,您可以使用Dispatcher.Invoke
/ BeginInvoke
在调度程序线程中执行委托......但这会更复杂。如果您需要在每个计时器上执行重要工作,然后只使用结果更新UI,这将是一种更好的方法 - 但由于您在这里根本没有做太多工作,所以在UI中完成所有工作都没关系线程。
答案 1 :(得分:2)
没有意识到这是一个WPF应用程序。你需要掌握Dispatcher,你可以在构造函数中执行:
private Dispatcher _dispathcer;
public LoginForm()
{
InitializeComponent();
_dispathcer = Dispathcer.CurrentDispather;
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
_dispathcer.Invoke(new Action( ()=> { lblCurrentTime.Content = DateTime.Now.ToShortTimeString();});
}