求助 事件控制线程问题
求事件控制线程的例子,要能用按钮触发事件(Event)控制暂停,恢复,退出,thread.Suspend()/thread.Resume()这种不要
因为Event.WaitOne()是挂起当前线程,怎么通过事件让指定的线程执行这个从而达到暂停效果
试了Dispatcher.invoke老死锁,BeginInvoke么怎么也跑不进去
因为Event.WaitOne()是挂起当前线程,怎么通过事件让指定的线程执行这个从而达到暂停效果
试了Dispatcher.invoke老死锁,BeginInvoke么怎么也跑不进去
public class AA
{
public delegate void StatusChangedEventHandler(object sender, StatusEventArgs e);
public event StatusChangedEventHandler OnStatusChanged;
public void ChangeStatus(ThreadStatus s)
{
if (OnStatusChanged != null)
OnStatusChanged(this, new StatusEventArgs(s));
}
}
public void DoWork()
{
dper = Dispatcher.CurrentDispatcher;
aa.OnStatusChanged += ThreadPause;
for (int i = 0; i < 20;i++ )
{
string s = string.Format("ThreadID:{0} Add i:{1}", Thread.CurrentThread.ManagedThreadId.ToString(), i.ToString());
if (this.listBox1.InvokeRequired)
{
this.listBox1.Invoke(new MethodInvoker(() => { this.listBox1.Items.Add(s); }));
}
else
{
this.listBox1.Items.Add(s);
}
Thread.Sleep(1000);
}
}
public void ThreadPause(object sender, StatusEventArgs e)
{
Console.WriteLine(string.Format("ThreadPause Thread id:{0}", Thread.CurrentThread.ManagedThreadId));
if (e.status == ThreadStatus.Pause)
{
dper.BeginInvoke(new MethodInvoker(() =>
{
Console.WriteLine(string.Format("CurrentDispatcher Thread id:{0}"), Thread.CurrentThread.ManagedThreadId);
mEvent.WaitOne();
}),null);
}
}
private void btnPause_Click(object sender, EventArgs e)
{
aa.ChangeStatus(ThreadStatus.Pause);
}
...全文
相关推荐
动态控制线程执行和停止问题
该项目实现了一个Java Web应用程序,通过Servlet处理请求,并利用Eclipse配置支持动态控制线程的执行与停止。项目基于Java 1.6和Web 3.0规范,适用于Java EE 6兼容环
Java 控制线程的方法
Java 控制线程的方法Java 控制线程的方法是指在 Java 编程语言中控制线程执行的各种方法和技术。
java线程池:获取运行线程数并控制线程启动速度的方法
今天,我们将讨论如何获取运行线程数并控制线程启动速度的方法,以避免线程池溢出和内存溢出的问题。
Java使用Condition控制线程通信的方法实例详解
在 Java 中,使用 Condition 控制线程通信的方法主要有以下几点:1.
VC环境下控制线程的运行技术
**控制线程**:添加按钮控制线程的挂起、唤醒、休眠和终止。#### 四、总结本文通过实例阐述了在VC环境下创建两类线程的技术,以及如何在线程运行过程中控制线程的挂起、唤醒、休眠和终止。


