我正在尝试在Windows Phone应用程序中实现一个计时器。它可以在Windows Phone应用程序(Silverlight)中正常工作,但它在Windows Phone Blank App中无效。但是它给了我以下错误 -
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();
}
}
}
但它甚至有帮助。我如何解决这个错误?
答案 0 :(得分:9)
直接引用事件的方法处理程序将推断出类型,满足泛型类型声明要求。
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();
}
答案 1 :(得分:6)
只需写下mytimer.Tick +=
然后按 TAB键两次即可修复您的错误。
答案 2 :(得分:1)
如果您想避免转换,可以随时执行以下操作:
mytimer.Tick += (s, ev) => { mytime_Tick(s, ev); }
如果您要验证无效,这非常有用:
mytimer.Tick += (s, ev) => { mytime_Tick?.Invoke(s, ev); }
此致,Nicholls
答案 3 :(得分:0)
正如错误消息试图告诉您,您需要创建EventHandler<object>
。
或者,更好的是,完全保留委托类型,只需添加方法名称。