求助 事件控制线程问题

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);
}
...全文
106 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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; } 另外注意下使用寄存器变量控制线程由于寄存器的特殊性有极小的概率会出错,具体自己百度

111,092

社区成员

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

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

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