zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }

  • 相关阅读:
    20145314郑凯杰 《Java程序设计》实验一 Java开发环境的熟悉(Windows + Eclipse)实验报告
    20145314郑凯杰 《Java程序设计》第6周学习总结
    20145314郑凯杰 《Java程序设计》第5周学习总结
    20145314郑凯杰 《Java程序设计》第4周学习总结
    20145314郑凯杰 《Java程序设计》第3周学习总结
    20145314郑凯杰 《Java程序设计》第2周学习总结 代码开始!
    20145314郑凯杰 《Java程序设计》第1周学习总结
    【问卷调查】来吧!新学期!
    先记录一下吧 开始的程序 hello!java!
    第0周学习总结
  • 原文地址:https://www.cnblogs.com/jordan2009/p/1554737.html
Copyright © 2011-2022 走看看