调度计时器将不起作用

Dispatch timer won't work

我试图弄清楚调度计时器是如何工作的,以便我可以将其实现到我的程序中,我按照网站上的确切说明进行操作并寻找有关堆栈溢出的答案。人们说他们的问题已解决,但我有非常相似的代码,但它不会工作...

错误是:

No overload for "timer_Tick" matches delegate "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();
}

您需要修复事件处理程序签名。它缺少发件人,第二个参数的类型只是 object(参见documentation。)

void timer_Tick(object sender, object e)
{
    TimeRefresh();
}

您还需要在 class 的顶部添加一个 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 的区别。

您必须指定事件的来源。

void timer_Tick(object sender,EventArgs e)
{
    TimeRefresh();
}

活动注册应该是这样的:

timer.Tick += new EventHandler(timer_Tick);

Here 您可以阅读有关事件和事件处理程序的更多信息