我在寫一個需要與串口通信的程序。我主要關心的是防止碰撞,並確保不同時寫入/讀取不同的功能。在多線程間執行代碼
首先,有一個系統定時器從開始開始,用於週期性地將數據寫入到串行端口,並且還收聽由給定的超時值的響應。因此,它會有一個已經完成的事件並完成工作。
其次,還有另外一個功能,具有較高優先級服務,將需要立即將數據寫入到串行端口。
方案1. Elapsed事件燒成每次1分鐘,並繼續進行從未如果仍然從先前的一個或SendImmediately功能掛起。
場景2. 如果SendImmediately被調用,它將需要等待當前運行的OnTimedEvent完成。再次,OnTimedEvent的下一次運行將停止,直到SendIm立即完成。
問題。 如何在上一個或SendImmediately完成之前阻止OnTimedEvent的下一次運行?基本上,要防止它們之間的干擾。
我已經經歷了一些問答&一去這裏。有許多建議答案象下面這樣:
- 禁用和啓用定時器
- 的AutoResetEvent(2路信令)
- ManualResetEvent的
- Monitor.Enter/Monitor.Exit(鎖定)
- 隊列
- 睡眠/加入/任務。等待(阻止)
我沒有堅實的fo因爲每個人都有不同的情景,所以決定哪一種方法適合我或者適合我。非常感謝任何建議。
public System.Timers.Timer aTimer = new System.Timers.Timer(Properties.Settings.Default.Interval * 60 * 1000);
public bool InitialTimer(int interval, bool action)
{
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = interval;
aTimer.Enabled = action;
GC.KeepAlive(aTimer);
return action;
}
public void OnTimedEvent(object source, ElapsedEventArgs e)
{
// write something to serial port
}
public void WriteImmediately()
{
// write something to serial port
}