zoukankan      html  css  js  c++  java
  • C# 简单线程实例

    1.简单线程实例 以及委托(同步委托、异步委托)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Runtime.Remoting.Messaging;
    
    namespace ThreadTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("主线程运行中.....{0}",Thread.CurrentThread.ManagedThreadId);
    
    
    
                #region 线程
    
                Thread thread = new Thread(new ThreadStart(ShowMsg));
    
                //只是 建议操作系统把当前线程当成 低级别
                thread.Priority = ThreadPriority.Lowest;
    
                //给开发人员用,来识别不同系统
                thread.Name = "threadtest";
    
                //后台线程:如果所有的前台线程都退出了,那么后台线程自动关闭
                thread.IsBackground = true;
    
                //并没有执行,告诉操作系统
                thread.Start();
    
                //关闭线程
                //thread.Abort();
    
    
                #endregion
    
                /*
    
                #region 异步委托
    
                AddDel addDel = new AddDel(Add);
    
                int result = 0;
    
                //同步调用,当前线程去调用
                //int result = addDel(1, 2);
    
    
                //第一种:回调函数
    
                //启动委托指向的方法执行,具体有线程池提供一个线程来执行当前的委托执行的方法
                //IAsyncResult asynResult = addDel.BeginInvoke(1, 2, null, null);
    
                //此EndInvoke方法会阻塞当前线程,直到委托方法执行完毕后,并将返回值交result后,继续执行后面代码
                //int result = addDel.EndInvoke(asynResult);
    
    
    
                //第二种:使用回调函数
    
                IAsyncResult ascResult = addDel.BeginInvoke(1, 2, new AsyncCallback(MyDelCallBack), 33);
    
    
    
                //Console.WriteLine("result:{0}", result); 
    
    
                #endregion
                 **/
    
    
                Console.WriteLine("主线程执行完成...");
    
                Console.ReadKey();
            }
    
    
            public delegate int AddDel(int a, int b);
    
    
            public static int Add(int a,int b)
            {
                Console.WriteLine("工作线程工作着....{0}",Thread.CurrentThread.ManagedThreadId);
    
                Thread.Sleep(3000);
    
                return a+b;
            }
    
            //异步委托 执行完成了的回调函数
            public static void MyDelCallBack(IAsyncResult asyResult)
            {
                //将接口类型转换成实例类型
                AsyncResult aResult = (AsyncResult)asyResult;
    
    
                //判断委托是否执行完成
                while(!aResult.IsCompleted)
                {
                    
                    //主线程干些时间
                    //防止主线程阻塞
                
                }
    
                //转换成我们自己的委托类型
                AddDel addDelResult = (AddDel)aResult.AsyncDelegate;
    
                //获取回调状态值
                int state = (int)aResult.AsyncState;
    
    
                //执行完成获取 执行的结果
                int result = addDelResult.EndInvoke(asyResult);
    
                Console.WriteLine("异步完成的回调方法执行的结果:{0}----回调状态:{1}----线程id:{2}",result,state,Thread.CurrentThread.ManagedThreadId);
    
    
            }
    
    
            static void ShowMsg()
            {
                Console.WriteLine("ShowMsg方法----工作线程工作着....{0}",Thread.CurrentThread.ManagedThreadId);
    
                Thread.Sleep(1000);
            
            }
        }
    }
  • 相关阅读:
    51nod 1621 花钱买车牌 优先队列
    最大字段和 51nod 1049 水水水水水水水水水水水水
    大数相乘 51nod 1027 水题
    逆序数 51nod 1019 归并 分治
    最长公共子序列 LCS 递归 dp 51Nod 1006
    vc6 字体设置
    自行车维护大全(zz)
    DirectX 9.0 3D游戏开发编程基础 [书评](zz)
    二维线段树
    latex 引用文献 bib
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/3980253.html
Copyright © 2011-2022 走看看