- 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();
-
-
- });
- }
-
- 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)
-
- 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;
-
- manualResetEvent.Set();
- }
- }
- }
posted @
2012-08-22 22:02
好运博客
阅读(
914)
评论()
编辑
收藏
举报