在C#

时间:2016-08-07 09:07:04

标签: c# uwp

我正在写一个自定义的Timer,它扩展了DispatcherTimer。它有一个名为TimerSetUp的方法,我将Tick事件与EventHandler相关联。

public class MyTimer : DispatcherTimer
{
     public MyTimer(){}
     public void TimerSetUp(EventHandler<EventArgs> _EventHandler)
     {
         base.Tick += _EventHandler;
     }
}

我现在有另外两个类,StopwatchTimer和CountdownTimer,它们扩展了MyTimer。我们来看看CountdownTimer。

public class CountdownTimer : MyTimer
{
     public CountdownTimer()
     {
         base.TimerSetUp(CountdownTimer_Tick);
     }

     public void CountdownTimer_Tick(object sender, EventArgs e)
     {
         //...do something
     }
}

当声明其中任何一个时,构造函数必须调用基类方法 TimerSetUp并设置事件处理程序。

问题是,在TimerSetUp函数的签名中,它给了我这个错误

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

我无法摆脱它。如果我只是将TimerSetUp放在CountdownTimer中,并直接分配事件处理程序,就像这样

base.Tick += CountdownTimer_Tick;

它有效,但我真的想让它以另一种方式工作。 所以我想知道是否

1)我有办法解决这个问题

2)这是代码可扩展性的好方法吗?

2 个答案:

答案 0 :(得分:1)

没关系,我做到了。我只是在函数签名中输入了一个泛型对象,并在代码中包含了一个新的eventHandler。

public void TimerSetUp(EventHandler<object> _EventHandler)
{
   base.Tick += new EventHandler<object>(_EventHandler);
}

答案 1 :(得分:0)

DispatchTimer.Tick似乎是非通用EventHandler而不是EventHandler<EventArgs>。由于您仍在使用基础EventArgs,因此它们在功能上是等效的:

public void TimerSetUp(EventHandler _EventHandler)
 {
     base.Tick += _EventHandler;
 }

请参阅:https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.tick(v=vs.110).aspx