⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 program.cs

📁 多线程的的实现
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Runtime.Remoting.Lifetime;
using System.Runtime.Remoting.Messaging  ;
namespace MultiThread
{
    class Program
    {
        delegate string MyMethoudDelegate(string param);
        delegate string MyMethoudMPDel(string par1,string par2);
        static void Main(string[] args)
        {
            Program me=new Program();

            #region 无参
            ThreadStart firstTD = new ThreadStart(me.FunctionThreadInSec);
            Thread td = new Thread(firstTD);
            td.Name = "sec";
            td.Start();
            #endregion

            #region 有参 ParameterizedThreadStart
            MyClass mcs = new MyClass();
            ParameterizedThreadStart pts = new ParameterizedThreadStart(mcs.MyMethod2);
            Thread td3 = new Thread(pts);
            td3.Start("123");
            #endregion

            #region 有参 构造

            MyClass mc = new MyClass("tsinhata");
            Thread td2 = new Thread(new ThreadStart(mc.MyMethod1));
            td2.Name = "Construct";
            td2.Start();
            #endregion

            #region 有参 线程池//线程池概念
            MyClass mc2 = new MyClass();
            ThreadPool.QueueUserWorkItem(new WaitCallback(mc2.MyMethod2), "tsin");
            Thread.Sleep(300);
            #endregion 

            #region 异步委托传参
            
            MyClass mc3 = new MyClass();
            MyMethoudDelegate mydelegate = new MyMethoudDelegate(mc3.MyMethod3);
            ///delegate  begin end
            mydelegate.BeginInvoke("methoud1parm1", new AsyncCallback(me.AfterDelegate), null);

            ///多参
            MyMethoudMPDel mulpar = new MyMethoudMPDel(mc3.MyMutilParameters);
            IAsyncResult asc=  mulpar.BeginInvoke("hata", "tsin", new AsyncCallback(me.AfterDelegate), null);
            ///委托执行完成,主线程才继续
            asc.AsyncWaitHandle.WaitOne();
            #endregion

           
            Console.WriteLine(Thread.CurrentThread.ThreadState.ToString());
            Console.WriteLine("exit..?");

            
            Thread.Sleep(5000);///主线程等待
            string mm = Console.ReadLine();

        }

        /// <summary>
        /// 委托结束
        /// </summary>
        /// <param name="asr"></param>
        void AfterDelegate(IAsyncResult asr)
        {
            AsyncResult async = (AsyncResult)asr;

            MyMethoudDelegate DelegateInstance = async.AsyncDelegate as MyMethoudDelegate;
            if (DelegateInstance != null)
            {
                Console.WriteLine("函数调用返回值:{0}\n", DelegateInstance.EndInvoke(asr));
            }
            else
            {
                MyMethoudMPDel delins = async.AsyncDelegate as MyMethoudMPDel;
                Console.WriteLine("函数调用返回值:{0}\n", delins.EndInvoke(asr));
            }


        }

        void FunctionThreadInSec()
        {
            for(int i=0;i<10;i++)
            {
                Thread.Sleep(500);
                Console.WriteLine(i.ToString() + Thread.CurrentThread.Name );
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -