C# Winform版 现有两个线程,怎么先后调用呢?

wudongdelinghuen 2012-03-20 03:38:00
请问下,如果有这两个线程
Thread thread1 = new Thread(new ThreadStart(speed));
Thread thread2 = new Thread(new ThreadStart(time)); speed和time是俩方法名。

怎么在程序里先后调用呢? 需要调用thread1三秒钟的时候,thread2不动。 thread1调用完后就暂停,然后调用thread2三秒钟。怎么设置噢?
...全文
220 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjnkd 2012-03-20
  • 打赏
  • 举报
回复
AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别。Set方法将信号置为发送状态,Reset方法将信号置为不发送状态,WaitOne等待信号的发送。可以通过构造函数的参数值来决定其初始状态,若为true则非阻塞状态,为false为阻塞状态。如果某个线程调用WaitOne方法,则当信号处于发送状态时,该线程会得到信号, 继续向下执行。其区别就在调用后,AutoResetEvent.WaitOne()每次只允许一个线程进入,当某个线程得到信号后,AutoResetEvent会自动又将信号置为不发送状态,则其他调用WaitOne的线程只有继续等待.也就是说,AutoResetEvent 一次只唤醒一个线程;而ManualResetEvent则可以唤醒多个线程,因为当某个线程调用了ManualResetEvent.Set()方法后,其他调l用WaitOne的线程获得信号得以继续执行,而ManualResetEvent不会自动将信号置为不发送。也就是说,除非手工调用了 ManualResetEvent.Reset()方法,则ManualResetEvent将一直保持有信号状态,ManualResetEvent也就可以同时唤醒多个线程继续执行。

Mutex混合了 AutoResetEvent与anualResetEvent的一些特性,简单来说:
1.Mutex和AutoResetEvent一样,只能允许一个线程进入。当一个线程获得许可之后,其它等待的线程必须继续等待;
2.Mutex和ManualResetEvent一样,必须手动释放许可证,即调用Mutex.ReleaseMutex()方法。
hoken2020856 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
timer,3秒间隔,先暂停2,然后1执行,下一次就是2执行,1暂停
[/Quote]
Suspend(),Resume()
wudongdelinghuen 2012-03-20
  • 打赏
  • 举报
回复
不是,thread1在三秒后还没有完成,不过三秒后要先运行thread2 然后再反过来运行thread1,循环。
[Quote=引用 5 楼 wudongdelinghuen 的回复:]

啊,我不太会这个,能说详细点么
引用 2 楼 stonespace 的回复:

用ManualResetEvent等同步对象控制,
[/Quote]
烟波钓 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 wudongdelinghuen 的回复:]
请问下,如果有这两个线程
Thread thread1 = new Thread(new ThreadStart(speed));
Thread thread2 = new Thread(new ThreadStart(time)); speed和time是俩方法名。

怎么在程序里先后调用呢? 需要调用thread1三秒钟的时候,thread2不动。 thread1调用完后就暂停……
[/Quote]
流程有点乱挖
thread1再3秒内就完成了 应该如何调用呢?直接是后者?
wudongdelinghuen 2012-03-20
  • 打赏
  • 举报
回复
啊,我不太会这个,能说详细点么
[Quote=引用 2 楼 stonespace 的回复:]

用ManualResetEvent等同步对象控制,
[/Quote]
wudongdelinghuen 2012-03-20
  • 打赏
  • 举报
回复
您好,能说详细点么?暂停是用sleep还是abort呢?如果可以帮我打可以么?
[Quote=引用 1 楼 bdmh 的回复:]

timer,3秒间隔,先暂停2,然后1执行,下一次就是2执行,1暂停
[/Quote]
stonespace 2012-03-20
  • 打赏
  • 举报
回复
用ManualResetEvent等同步对象控制,
bdmh 2012-03-20
  • 打赏
  • 举报
回复
timer,3秒间隔,先暂停2,然后1执行,下一次就是2执行,1暂停

111,126

社区成员

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

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

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