日期:2014-05-19  浏览次数:20694 次

如何使用C#语言实现两语句在执行过程有一个时间差度?
问题是这样的:
  我在实现serialport串口通讯时,碰到这样的问题,在串口初始化好后,向串口发送信号后,使用函数Writeline()(或其他的读函数)读串口缓冲区的数据,问题就在这里,不能马上读到数据,需要一段等待时间,再能读出数据,所以就要求在发送读信号好等待一个时间再读,请各位大虾帮忙出个注意或写一两条代码,谢谢!

------解决方案--------------------
thread.sleep(3000);

能用,但肯定不是好办法……
------解决方案--------------------
用Thread.Sleep()方法。

如:

Thread.Sleep(3000);线程休眠3秒钟!
------解决方案--------------------
thread.sleep
或者用事件触发
------解决方案--------------------
等全部执行完了再提交啊
------解决方案--------------------
Thread.Sleep(毫秒数)
------解决方案--------------------
线程睡眠或Timer定时
------解决方案--------------------
写一个等待时间函数
------解决方案--------------------
如果你的发送和接受都是在同一个线程上,用Sleep最简单,向上边各位说的就行;
如果不在同一个线程上可以用ManualResetEvent从一个线程上给另一个发信号.

另外,不知道LZ用哪些方法读串口,它是否有阻塞方式的读取呢?也就是说没来信号的时候读的代码被阻塞在那里,一直到有数据传过来为止.
------解决方案--------------------
可以设置一个信号量
等数据处理好了 再进行读取
你可以找一下线程同步方面的例子

Thread.Sleep(毫秒数); 也可以 但没有使用同步的方法好使
------解决方案--------------------
不要在主线程处理,另外开一个线程来处理吧!
------解决方案--------------------
LS 说的对,你可以试试把读抛到另外一个线程上.帮你写了个例子:

System.Threading.ManualResetEvent _formClosing = new ManualResetEvent(false);

private void Form1_Load(object sender, EventArgs e)
{
timer1.Start(); //定时器启动

//生成一个新的线程接收,主线程不用等了.
System.Threading.Thread t = new Thread(new ThreadStart(ReceiveData));
t.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
string firstname, lastname, result1;
try
{ //串口打开
sp.Open();
//向串口发送一字符‘a’
sp.WriteLine( "a ");

//timer1.Stop();
}
catch (Exception ex)
{ return; }
finally
{ sp.Close(); }

}


/// <summary>
/// 它运行在另外一个线程上.
/// </summary>
private void ReceiveData()
{
//循环读,每次等待50毫秒,Form关闭就退出循环
while (!_formClosing.WaitOne(50, false))
{
//从串口缓冲区里读数据
string result1 = sp.ReadLine().ToString();

//把数据写入数据库
if (result1 != null && result1.Length > 0)
{
firstname = result1.Substring(0, 2);
lastname = result1.Substring(2, 2);
datainsert(firstname, lastname);
}

}
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
//给信号停止接收线程
_formClosing.Set();
}

------解决方案--------------------
帮顶了