线程简单示例

 
 
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(); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值