C#线程暂停与开启的代码

  • using System;  
  • using System.ComponentModel;  
  • using System.Windows.Forms;  
  • using System.Threading;  
  •  
  • namespace AutoResetEventTest  
  • {  
  •     public partial class Form1 : Form  
  •     {  
  •         private ManualResetEvent manualResetEvent;  
  •         private AutoResetEvent auto;  
  •         private bool suspend;  
  •         private AsyncOperation asyncOperation;  
  •  
  •         public delegate void InvokeDelegate(string str);  
  •  
  •         private InvokeDelegate invokeDelegate;  
  •         const string str = "Test";  
  •         private bool formClosed;  
  •  
  •         public Form1()  
  •         {  
  •             InitializeComponent();  
  •             manualResetEvent = new ManualResetEvent(false);  
  •             auto = new AutoResetEvent(true);  
  •             asyncOperation = AsyncOperationManager.CreateOperation(null);  
  •             invokeDelegate = new InvokeDelegate(this.SafeInvoke);  
  •             this.FormClosed += delegate 
  •                                    {  
  •                                        this.formClosed = true;  
  •                                        this.auto.Close();  
  •                                    };  
  •         }  
  •  
  •         private void btnStart_Click(object sender, EventArgs e)  
  •         {  
  •             this.btnStart.Enabled = false;  
  •             this.btnSuspend.Enabled = true;  
  •             ThreadPool.QueueUserWorkItem(delegate 
  •                                              {  
  •                                                  SafeInvoke();  
  •  
  •                                                  //this.BeginInvoke(invokeDelegate, new object[] { str });  
  •                                              });  
  •         }  
  •  
  •         private void btnSuspend_Click(object sender, EventArgs e)  
  •         {  
  •             this.btnSuspend.Enabled = false;  
  •             this.btnResume.Enabled = true;  
  •             this.suspend = true;  
  •             manualResetEvent.Reset();  
  •         }  
  •  
  •         private void SafeInvoke(string s)  
  •         {  
  •             while (true)  
  •             {  
  •                 if (formClosed)  
  •                     return;  
  •  
  •                 Thread.Sleep(200);  
  •  
  •                 if (suspend)  
  •                     this.auto.WaitOne();  
  •                 this.txtMessageBox.AppendText(s);  
  •             }  
  •         }  
  •  
  •         private void SafeInvoke()  
  •         {  
  •             while (true)  
  •             {  
  •                 if (formClosed)  
  •                     return;  
  •  
  •                 Thread.Sleep(200);  
  •  
  •                 if (suspend)  
  •                     //this.auto.WaitOne();  
  •                     manualResetEvent.WaitOne();  
  •  
  •                 asyncOperation.Post(delegate 
  •                                     {  
  •                                         this.txtMessageBox.AppendText(str);  
  •                                     }, str);  
  •             }  
  •  
  •         }  
  •  
  •         private void btnResume_Click(object sender, EventArgs e)  
  •         {  
  •             this.btnResume.Enabled = false;  
  •             this.btnSuspend.Enabled = true;  
  •             this.suspend = false;  
  •             //this.auto.Set();  
  •             manualResetEvent.Set();  
  •         }  
  •     }  
posted @ 2012-08-22 22:02  好运博客  阅读(914)  评论(0编辑  收藏  举报