1 回答
TA贡献1780条经验 获得超1个赞
您目前遇到的问题是您的set访问者有一个主体,但不是get(有关基础知识,请参阅此帖子)。根据我的理解(和文档),任何一个带有事件的访问器中都不需要主体(我也不认为这是允许的)。实现您的目标的最简单的解决方案是私下引发计时器事件(这应该是默认值)并使用这些事件来调用您的自定义事件:
using System.Timers;
internal class DualTimer {
#region Fields
private Timer leftTimer;
private Timer rightTimer;
#endregion
#region Events
public event EventHandler LeftTick;
public event EventHandler RightTick;
#endregion
#region Constructor(s)
public DualTimer(int leftInterval, int rightInterval) {
leftTimer = new Timer(leftInterval);
rightTimer = new Timer(rightInterval);
leftTimer.Elapsed += leftTimer_Elapsed;
rightTimer.Elapsed += rightTimer_Elapsed;
}
#endregion
#region Public Methods
public void Start() {
leftTimer.Start();
rightTimer.Start();
}
public void Stop() {
leftTimer.Stop();
rightTimer.Stop();
}
#endregion
#region Private Methods
private void leftTimer_Elapsed(object sender, EventArgs e) {
LeftTick(sender, e);
}
private void rightTimer_Elapsed(object sender, EventArgs e) {
RightTick(sender, e);
}
#endregion
}
这将隐藏各个计时器的事件,因为它们是类的私有对象。当它们的 elapsed 事件被引发时,你的左右滴答事件将分别被引发。这可以很容易地扩展以添加您的黄灯(顺便说一下,这是一个很好的类比)。这个类的实现非常简单:
static DateTime startTime;
static void Main(string[] args) {
DualTimer t = new DualTimer(100, 250);
t.LeftTick += T_LeftTick;
t.RightTick += T_RightTick;
startTime = DateTime.Now;
t.Start();
Console.ReadKey();
t.Stop();
}
private static void T_LeftTick(object sender, EventArgs e) {
Console.WriteLine($"Right side tick. {DateTime.Now - startTime}");
}
private static void T_RightTick(object sender, EventArgs e) {
Console.WriteLine($"Left side tick. {DateTime.Now - startTime}");
}
关于这个问题的一个很好的读物是在你的类中实现事件的MSDN教程。
以下过程描述了如何在类中实现事件。第一个过程实现了一个没有关联数据的事件;它使用类System.EventArgs和System.EventHandler事件数据和委托处理程序。第二个过程使用自定义数据实现一个事件;它为事件数据和事件委托处理程序定义了自定义类。
该教程非常详尽,并且包含大量有关事件的信息(有数据和没有数据)。请随意阅读以进一步了解。
- 1 回答
- 0 关注
- 243 浏览
添加回答
举报