111,092
社区成员




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);
}