【问题标题】:Cannot implicitly convert type System.EventHandler to System.EventHandler<object> error无法将类型 System.EventHandler 隐式转换为 System.EventHandler<object> 错误
【发布时间】:2015-02-15 02:43:57
【问题描述】:

我正在尝试在 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

但它甚至有所帮助。我该如何解决这个错误?

【问题讨论】:

    标签: c# visual-studio windows-phone-7 windows-phone-8


    【解决方案1】:

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

    mytimer.Tick += mytime_Tick;
    

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

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

    会成功的。

    另外,根据documentation,您的处理程序有错误的签名。应该是:

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

    【讨论】:

      【解决方案2】:

      只需写mytimer.Tick += 然后按两次TAB 键 即可修复您的错误。

      【讨论】:

        【解决方案3】:

        如果您想避免转换,您始终可以执行以下操作:

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

        如果您要验证可空值,这将非常有用:

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

        问候,尼科尔斯

        【讨论】:

          【解决方案4】:

          正如错误消息试图告诉你的那样,你需要创建一个EventHandler&lt;object&gt;

          或者,更好的是,完全不用委托类型,只添加方法名称。

          【讨论】:

          • 这两个都给了我同样的新错误 - mytime_Tick 没有重载匹配委托 `System.EventHandler
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-11
          • 1970-01-01
          • 2013-10-02
          • 1970-01-01
          • 2016-11-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多