无法将类型 System.EventHandler 隐式转换为 System.EventHandler<object> 错误
Cannot implicitly convert type System.EventHandler to System.EventHandler<object> error
我正在尝试在 windows phone app.It 中实现一个计时器,在 Windows Phone App(Silverlight) 中工作正常,但在Windows Phone 空白 App.But 它给了我以下错误-
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
但它甚至 helped.How 我可以修复这个错误吗?
正如错误消息试图告诉您的那样,您需要创建一个 EventHandler<object>
。
或者,更好的是,完全不使用委托类型,只添加方法名称。
直接引用事件的方法处理程序将推断类型,满足泛型类型声明要求。
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();
}
只要写mytimer.Tick +=
然后按TAB键两次就可以修复你的错误。
如果您想避免转换,您可以随时执行以下操作:
mytimer.Tick += (s, ev) => { mytime_Tick(s, ev); }
如果您要验证可空值,这将非常有用:
mytimer.Tick += (s, ev) => { mytime_Tick?.Invoke(s, ev); }
此致,尼科尔斯
我正在尝试在 windows phone app.It 中实现一个计时器,在 Windows Phone App(Silverlight) 中工作正常,但在Windows Phone 空白 App.But 它给了我以下错误-
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
但它甚至 helped.How 我可以修复这个错误吗?
正如错误消息试图告诉您的那样,您需要创建一个 EventHandler<object>
。
或者,更好的是,完全不使用委托类型,只添加方法名称。
直接引用事件的方法处理程序将推断类型,满足泛型类型声明要求。
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();
}
只要写mytimer.Tick +=
然后按TAB键两次就可以修复你的错误。
如果您想避免转换,您可以随时执行以下操作:
mytimer.Tick += (s, ev) => { mytime_Tick(s, ev); }
如果您要验证可空值,这将非常有用:
mytimer.Tick += (s, ev) => { mytime_Tick?.Invoke(s, ev); }
此致,尼科尔斯