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 關注
- 275 瀏覽
添加回答
舉報