zoukankan      html  css  js  c++  java
  • 异步编程设计模式Demo

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
    using System.Threading;
    
    namespace AsyncProgramDemo
    {
        public class AsyncComponentSample : Component
        {
            public event Action<object, BreakEventArgs> Break;
    
            public event Action<object, DebugCompltedEventArgs> Completed;
    
            public void StartDebug()
            {
                AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(1);
                Action<AsyncOperation> exec = new Action<AsyncOperation>(Execute);
                exec.BeginInvoke(asyncOp, null, null);
            }
    
            private void Execute(AsyncOperation asyncOp)
            {
                Thread.Sleep(1000);
                SendOrPostCallback callback = new SendOrPostCallback(Callback);
                asyncOp.Post(callback, 7);
                Thread.Sleep(1000);
                SendOrPostCallback completedCallback = new SendOrPostCallback(CompltedCallback);
                asyncOp.PostOperationCompleted(completedCallback, "completed");
            }
    
            private void Callback(object lineNumber)
            {
                if (Break != null)
                {
                    Break(this, new BreakEventArgs((int)lineNumber));
                }
            }
    
            private void CompltedCallback(object msg)
            {
                if (Completed != null)
                {
                    Completed(this, new DebugCompltedEventArgs(msg.ToString()));
                }
            }
        }
    
        public class BreakEventArgs : EventArgs
        {
            public int LineNumber;
    
            public BreakEventArgs(int lineNumber)
            {
                this.LineNumber = lineNumber;
            }
        }
    
        public class DebugCompltedEventArgs : AsyncCompletedEventArgs
        {
            public string Msg;
    
            public DebugCompltedEventArgs(string msg) : base(null, false, null)
            {
                this.Msg = msg;
            }
        }
    }
  • 相关阅读:
    Visual Studio 中的 .NET Framework 类库
    泛型
    泛型
    事件
    基于事件的异步模式
    使用委托进行异步编程
    使用 IAsyncResult 调用异步方法
    异步编程设计模式
    演练:使用VS2010 C# 创作简单的多线程组件
    [转][MEF插件式开发] 一个简单的例子
  • 原文地址:https://www.cnblogs.com/chengshuiqiang/p/4479051.html
Copyright © 2011-2022 走看看