调度计时器不起作用

时间:2015-12-18 03:05:13

标签: c# uwp dispatchertimer

我正在试图弄清楚调度计时器是如何工作的,所以我可以将它实现到我的程序中,我按照网站上的确切说明查找堆栈溢出的答案。人们说他们的问题已得到解决,但我的代码非常相似,而且无法正常工作......

错误是:

  

“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();
}

2 个答案:

答案 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您可以阅读有关事件和事件处理程序的更多信息