求助 事件控制线程问题

xdf008 xdf008 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
求事件控制线程的例子,要能用按钮触发事件(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);
}
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
xdf008
C# 111,128 成员 642,536 内容