错误'timer_Tick'的重载与委托'System.EventHandler <object>'</object>匹配

时间:2013-02-25 20:42:24

标签: c#

我不确定我的代码有什么问题,有人可以帮助修复错误吗?错误位于timer.Tick()行。它应该是一个秒表。

namespace App3
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {                
            this.InitializeComponent();
        }
        private int myCount;

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            DispatcherTimer timer = new DispatcherTimer();
            timer.Tick += new EventHandler<object>(timer_Tick);
            timer.Interval = TimeSpan.FromSeconds(5);
            timer.Start();    
        }


        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedFrom(e);
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            myCount++;
            Label.Text = myCount.ToString();
        }
    }

4 个答案:

答案 0 :(得分:5)

DispatcherTimer.TickEventHandler,而不是EventHandler<object>

您需要更改代码才能正确指定:

 timer.Tick += new EventHandler(timer_Tick);

请注意,这也可以用简短的形式编写,通常更安全:

timer.Tick += timer_Tick;

答案 1 :(得分:4)

附加事件时不需要委托类型,编译器可以为您解决。试试这个:

timer.Tick += timer_Tick;

至于为什么你当前得到错误,EventHandler委托声明如下:

public delegate void EventHandler<TEventArgs>(
    Object sender,
    TEventArgs e
)

这意味着您放在括号中的类型代表函数中的第二个参数。

因此,当您键入EventHandler<object>时,编译器会查找找不到的timer_Tick(Object sender, object e)函数,因此会出错。要使用完整的委托类型,必须是EventHandler<EventArgs>

答案 2 :(得分:1)

而不是新的EventHandler<object>,请new EventHandler。或者只是放+= timer_Tick;

答案 3 :(得分:1)

我通过两个小改动解决了同样的问题:

1)将第二个参数更改为type object:

INSTEAD OF THIS:

private void timer_Tick(object sender, EventArgs e)

使用它:

private void timer_Tick(object sender, **object** e)

2)简化

INSTEAD OF THIS:

timer.Tick += new EventHandler<object>(timer_Tick);

使用它:

timer.Tick += timer_Tick;  // as suggested by WildCrustacean above