无法将类型'System.EventHandler'隐式转换为'System.EventHandler <object>'以完成情节提要

Ixx*_*Ixx 6 c# microsoft-metro windows-8

我已经阅读了一些关于此的线索,但我仍然不知道如何在我的情况下解决它.我来自Java,大多是C#的新手

我想在动画结束时附加监听器:

myStoryBoard.Completed += new EventHandler(onMyStoryBoardCompleted);
Run Code Online (Sandbox Code Playgroud)

和:

private void onMyStoryBoardCompleted(object sender, EventArgs e)
{       
}
Run Code Online (Sandbox Code Playgroud)

我在标题中得到错误.我试过了:

 myStoryBoard.Completed += new EventHandler<object>(onMyStoryBoardCompleted);
Run Code Online (Sandbox Code Playgroud)

但后来我得到:

no overload for 'onMyStoryBoardCompleted' matches delegate 'System.EventHandler<object>'
Run Code Online (Sandbox Code Playgroud)

所以似乎签名与EventHandler不兼容,<object>我找不到如何使它兼容,我也不知道这种方法是否正确.

我读

了解C#中的事件和事件处理程序

从System.EventHandler到System.EventHandler <TEventArgs>的C#动态模板隐式转换错误

在Windows 8应用程序中为DispatcherTimer的Tick事件定义事件处理程序

但仍然没有找到这种情况的解决方案.

提前致谢.

Dou*_*las 9

尝试:

private void onMyStoryBoardCompleted(object sender, object e)
{ }
Run Code Online (Sandbox Code Playgroud)

并使用通用订阅EventHandler<object>:

myStoryBoard.Completed += new EventHandler<object>(onMyStoryBoardCompleted);
Run Code Online (Sandbox Code Playgroud)

当然,这违反了.NET Framework约定,即事件处理程序的第二个参数应该是EventArgs(或从中派生的类)的实例.我假设您正在运行另一个框架,例如Windows 8 Metro,其Timeline类定义了CompletedEventHandler<object>签名的事件.

  • @Murkaeus请不要添加不必要的评论,我认为我的个人资料看起来不像我不知道如何使用SO. (2认同)