首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么使用C#语言实现两语句在执行过程有一个时间差度

2012-03-15 
如何使用C#语言实现两语句在执行过程有一个时间差度?问题是这样的:我在实现serialport串口通讯时,碰到这样

如何使用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();
}

[解决办法]
帮顶了

热点排行