c#如何添加延迟线程

lq0600240214 2012-10-27 11:24:00
简略的源程序是这样的:
private void button1_Click(object sender,Event Args)
{
.............
serialPort1.Write(tx_data,0,tx_data.Length);//串口发送数据
System.Threading.Thread.Sleep(90000);// 延时90s
byte[] buffer = new byte[serialPor1.BytesToRead];
serialPort1.Read(buffer,0,buffer.Length);//串口接收数据
................
}
但是用sleep来做延时的话界面会卡死,请教各位高手,用线程的方法来添加延时,代码应该怎么写?求各位不吝赐教,给个详细点的代码出来,谢谢
...全文
633 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hauk 2012-10-27
  • 打赏
  • 举报
回复

private void test()
{
Thread.Sleep(5000);
are.Set();
}

private void test2()
{
are.WaitOne();
MessageBox.Show("test2");
}

private AutoResetEvent are = new AutoResetEvent(false);
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(test);
t.Start();
Thread t1 = new Thread(test2);
t1.Start();

MessageBox.Show("AAA");
}


这两句用test执行
serialPort1.Write(tx_data,0,tx_data.Length);//串口发送数据
System.Threading.Thread.Sleep(90000);// 延时90s

这两句用test2执行
byte[] buffer = new byte[serialPor1.BytesToRead];
serialPort1.Read(buffer,0,buffer.Length);//串口接收数据

这样在线程中等待,另外一个线程接受信号。主线程就不会死掉了。
lq0600240214 2012-10-27
  • 打赏
  • 举报
回复
谢谢haukwong的帮忙,也谢谢楼上各位朋友的回答,学习了![Quote=引用 8 楼 的回复:]
引用 3 楼 的回复:

请教2楼,如果这4句话的前后还有一些语句,并且有调用到界面控件如:richTextBox1.Text = "";这类的语句,是否也是如你所写的这样添加呢?


在线程中调用主线程中的控件需要invoke的方式。
比如在上面的例子中的test方法中调用button的值:

C# code


private void test()
……
[/Quote]
Hauk 2012-10-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

请教2楼,如果这4句话的前后还有一些语句,并且有调用到界面控件如:richTextBox1.Text = "";这类的语句,是否也是如你所写的这样添加呢?
[/Quote]

在线程中调用主线程中的控件需要invoke的方式。
比如在上面的例子中的test方法中调用button的值:

private void test()
{
Func<string> func = () => { return this.button1.Text; };
object obj = this.Invoke(func);
MessageBox.Show(obj.ToString());
Thread.Sleep(5000);
are.Set();
}
小枪 2012-10-27
  • 打赏
  • 举报
回复
如果是具体时间可以seelp 如果要等待其他线程执行完了 可以用wait
puler 2012-10-27
  • 打赏
  • 举报
回复
坛子里面已经很多了,搜索一下试试
lq0600240214 2012-10-27
  • 打赏
  • 举报
回复
可以以上面的语句举个例子吗?谢谢
king520520 2012-10-27
  • 打赏
  • 举报
回复

用委托可以解决这个问题

lq0600240214 2012-10-27
  • 打赏
  • 举报
回复
请教2楼,如果这4句话的前后还有一些语句,并且有调用到界面控件如:richTextBox1.Text = "";这类的语句,是否也是如你所写的这样添加呢?

110,553

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧