无法将类型 System.EventHandler 隐式转换为 System.EventHandler<object> 错误。

8

我正在尝试在Windows Phone应用程序中实现一个计时器。它在Windows Phone应用程序(Silverlight)中运行良好,但在Windows Phone空白应用程序中却无法工作。但它给了我以下错误-

Cannot implicitly convert type System.EventHandler to System.EventHandler<object>

这是我的代码 -
namespace Timer
{
    public partial class MainPage : Page
    {           
        DispatcherTimer mytimer = new DispatcherTimer();
        int currentcount = 0;
        public MainPage()
        {
            InitializeComponent();

            mytimer = new DispatcherTimer();
            mytimer.Interval = new TimeSpan(0, 0, 0, 1, 0);
            mytimer.Tick += new EventHandler(mytime_Tick);
              //HERE error comes Cannot implicitly convert type System.EventHandler to System.EventHandler<object>
        }

        private void mytime_Tick(object sender,EventArgs e)
        {
            timedisplayBlock.Text = currentcount++.ToString();    
        }

        private void startButton_Click(object sender, RoutedEventArgs e)
        {
            mytimer.Start();
        }
    }
}

我试过Cannot implicitly convert type 'System.EventHandler' to 'System.EventHandler<object>' for storyboard complete,但它并没有帮助。我应该如何解决这个问题?

4个回答

15

直接引用事件的方法处理程序将推断类型,满足泛型类型声明的要求。

mytimer.Tick += mytime_Tick;

或者,显式声明泛型类型并使用泛型 EventHandler 构造函数,

mytimer.Tick += new EventHandler<object>(mytime_Tick);

这个问题可以通过使用文档中规定的正确签名来解决。此外,需要注意保持HTML标签不变。

private void mytime_Tick(object sender,object e)
{
    timedisplayBlock.Text = currentcount++.ToString();    
}

11

只需编写 mytimer.Tick +=,然后按TAB键两次即可解决问题。


2
如果您想避免转换,可以始终执行以下操作:
mytimer.Tick += (s, ev) => { mytime_Tick(s, ev); }

如果您正在验证可空性,这将非常有用:

mytimer.Tick += (s, ev) => { mytime_Tick?.Invoke(s, ev); }

问候,尼科尔斯


0

正如错误信息所表明的,你需要创建一个 EventHandler<object>

或者更好的方式是,完全忽略委托类型,只需添加方法名即可。


这两个都给了我同样的新错误 - No overload for mytime_Tickmatches delegateSystem.EventHandler<object> - user4075334

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接