求助 事件控制线程问题

xdf008 2013-04-28 01:33:03
求事件控制线程的例子,要能用按钮触发事件(Event)控制暂停,恢复,退出,thread.Suspend()/thread.Resume()这种不要
因为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);
}
...全文
76 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xdf008 2013-05-02
怎么老没人回答我的问题...真悲剧
回复
xdf008 2013-04-28
谢谢LS帮顶 这边线程里没有循环的实际 是有很多事要做,这里写了for只是为了模拟,没办法判断,总不能没执行一个语句判断下吧...
回复
qlx647625 2013-04-28
我这有个比较笨的方法 public volatile int a=0; //线程 void t() { while(a!=3) //==3退出 ...... while(a==2) //==2暂停 { sleep(100); } //正常代码 } //button 代码 button(...) { if(a==2) { a=1; } else { a=2; } //要退出就a=3; } 另外注意下使用寄存器变量控制线程由于寄存器的特殊性有极小的概率会出错,具体自己百度
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2013-04-28 01:33
社区公告

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