我的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