我的C#應用程序是這樣的,後臺工作人員正在用來等待一些傳輸數據的確認。這裏是一些僞代碼演示我想要做的事:使用BackgroundWorker在C#中併發線程
UI_thread
{
TransmitData()
{
// load data for tx
// fire off TX background worker
}
RxSerialData()
{
// if received data is ack, set ack received flag
}
}
TX_thread
{
// transmit data
// set ack wait timeout
// fire off ACK background worker
// wait for ACK background worker to complete
// evaluate status of ACK background worker as completed, failed, etc.
}
ACK_thread
{
// wait for ack received flag to be set
}
會發生什麼事是,ACK BackgroundWorker的超時,並確認沒有收到。我相當肯定它是由遠程設備傳輸的,因爲該設備根本沒有改變,並且C#應用程序正在傳輸。我從這裏改變了ACK線程(當它工作)...
for(i = 0; (i < waitTimeoutVar) && (!bAckRxd); i++)
{
System.Threading.Thread.Sleep(1);
}
...這個...
DateTime dtThen = DateTime.Now();
DateTime dtNow;
TimeSpan stTime;
do
{
dtNow = DateTime.Now();
stTime = dtNow - dtThen;
}
while ((stTime.TotalMilliseconds < waitTimeoutVar) && (!bAckRxd));
後者產生了非常acurate的等待時間相比前者。但是,我想知道是否刪除睡眠功能會干擾接收串行數據的能力。 C#是否只允許一次運行一個線程,也就是說,我是否必須讓線程在某個時間睡眠以允許其他線程運行?
任何想法或建議,你可能會感激。我正在使用Microsoft Visual C#2008速成版。謝謝。
謝謝,費奧多爾。這似乎是訣竅。我正在使用串行通信。 – 2010-05-11 20:34:34
很高興幫助。別客氣。 :-) – 2010-05-11 22:25:24