我正在试图弄清楚调度计时器是如何工作的,所以我可以将它实现到我的程序中,我按照网站上的确切说明查找堆栈溢出的答案。人们说他们的问题已得到解决,但我的代码非常相似,而且无法正常工作......
错误是:
“timer_Tick”的重载不匹配委托“EventHandler< object>”
我该怎么办?
public MainPage()
{
this.InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(EventArgs e)
{
TimeRefresh();
}
答案 0 :(得分:5)
您需要修复事件处理程序签名。它缺少发件人,第二个参数的类型只是object
。 (请参阅documentation。)
void timer_Tick(object sender, object e)
{
TimeRefresh();
}
您还需要在类的顶部添加using Windows.UI.Xaml;
,或使用完整命名空间实例化计时器:
Windows.UI.Xaml.DispatcherTimer timer = new Windows.UI.Xaml.DispatcherTimer();
如果有人偶然发现并使用WPF,则它拥有自己的DispatchTimer。确保您引用" WindowsBase" (默认应该在那里)。签名略有不同。
void timer_Tick(object sender, EventArgs e)
{
TimeRefresh();
}
它所居住的命名空间也不同。将using System.Windows.Threading;
添加到顶部,或使用完整命名空间限定:
System.Windows.Threading.DispatcherTimer timer
= new System.Windows.Threading.DispatcherTimer();
如果您正在使用WinForms,则需要使用其他计时器。 Read this了解WinForms Timer和WPF DispatchTimer之间的区别。
答案 1 :(得分:3)
您必须指定事件来源。
void timer_Tick(object sender,EventArgs e)
{
TimeRefresh();
}
事件注册应如下所示:
timer.Tick += new EventHandler(timer_Tick);
Here您可以阅读有关事件和事件处理程序的更多信息