C#中怎样暂停线程,点击button按钮后继续运行线程???谢谢谢谢了~~~~ 尝试了th.suspend和th.resume但不能达到预期的效果。我希望的是线程自动运行一步,然后就无限的挂起,直到点击button按钮之后线程再运行一步。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有个笨的办法就是:运行一步开启一个定时器周期长一点..然后线程sleep;定时器每到周期又继续让sleep 睡眠..按下BUTTON的话解除定时器并且让线程醒来 Suspend,Resume都是过期方法了。用标志位代替吧。private bool _stop = false;private bool _suspend = false;线程:while(!_stop){ if (_suspend) { Thread.Sleep(100); } else { // do some work... }} 如果是while循环的这种线程while(true){循环体中间用全局的System.Threading.ManualResetEvent的waitOne方法}按钮控制ManualResetEvent的中止状态和非中止状态如果不是while循环 就在线程执行代码中你认为可以停下来的地方 多放几个waitOne方法 6楼正解...不过ManualResetEvent我还不是很会用,随便写了一个楼主看看using System;using System.Windows.Forms;using System.Threading;namespace test{ public partial class Form3 : Form { public Form3() { InitializeComponent(); ThreadPool.QueueUserWorkItem(aaaa); } AutoResetEvent are = new AutoResetEvent(true); int i = 0; void aaaa(object o) { WaitCallback d = delegate(object oo) { this.label1.Text = oo.ToString(); }; while (true) { this.Invoke(d, ++i); if (b) { are.WaitOne(); } else { Thread.Sleep(500); } } } bool b = false; private void button1_Click(object sender, EventArgs e) { if (b=!b) { are.Reset(); } else { are.Set(); } } }} 按下BUTTON的话怎样让线程醒来?? 定义个全局变量保存所示ID就行了...GetThreadId() 获取线程ID 然后在通过OpenThread(); 通过ID获取该线程.最后调用Resume()唤醒;不过今天才看到信号量这张..觉得你自己创建个类..把信号量和所创立的线程封装到一起.应该更简单点.. ASp问题 C# 获取网页中经JS改变后的元素的信息 如何封装数据包 我的两个数据库表更新哪错了,哪位大哥帮看看这段代码 Response.Write()中给hidden赋值问题 DataGridView中DataGridViewImageCell图片列问题!!! 控件重绘 网络编程高手请进来,Socket发送图片错误~~~ C#中如何压缩图片? TextBox是不呵以像IE里的输入框一下具有记忆功能呢? C# 线程 线程池 线程同步 异步委托 后台线程 实例 Winform 如何完美实现一个加载数据的提示窗体?
运行一步
开启一个定时器周期长一点..
然后线程sleep;定时器每到周期又继续让sleep 睡眠..按下BUTTON的话解除定时器并且让线程醒来
private bool _suspend = false;线程:
while(!_stop)
{
if (_suspend)
{
Thread.Sleep(100);
}
else
{
// do some work...
}
}
while(true)
{
循环体中间用全局的System.Threading.ManualResetEvent的waitOne方法
}按钮控制ManualResetEvent的中止状态和非中止状态
如果不是while循环 就在线程执行代码中你认为可以停下来的地方 多放几个waitOne方法
6楼正解...不过ManualResetEvent我还不是很会用,随便写了一个楼主看看using System;
using System.Windows.Forms;
using System.Threading;namespace test
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent(); ThreadPool.QueueUserWorkItem(aaaa);
} AutoResetEvent are = new AutoResetEvent(true); int i = 0; void aaaa(object o)
{
WaitCallback d = delegate(object oo) { this.label1.Text = oo.ToString(); }; while (true)
{
this.Invoke(d, ++i); if (b)
{
are.WaitOne();
}
else
{
Thread.Sleep(500);
}
}
} bool b = false; private void button1_Click(object sender, EventArgs e)
{
if (b=!b)
{
are.Reset();
}
else
{
are.Set();
}
}
}
}
GetThreadId() 获取线程ID
然后在通过OpenThread(); 通过ID获取该线程.
最后调用Resume()唤醒;不过今天才看到信号量这张..觉得你自己创建个类..
把信号量和所创立的线程封装到一起.应该更简单点..