主线程和子线程

  一般情况下,一个应用程序有N(N>=1)个进程;每个进程有1个主线程,N(N>=1)个子线程,主线程退出,子线程就停止执行跟着退出;单核cup,操作系统通过时间片(30ms不等)轮转算法,根据优先级调度线程的执行和挂起,多核cup,可以真正实现线程的并发执行(某一时刻,同时运行多个线程)。

     1、让主线程等待子线程

          为了保证子线程顺利执行完成,可以调用子线程的join()方法,让主线程等待该子线程执行完成再继续往下执行。

     2、开启线程

          (1)Thread实例对象的start()方法,告诉操作系统可以调度次线程了,可以通过此方法向线程传递参数;

          (2)用委托(Delegate)的BeginInvoke和EndInvoke方法操作线程:

    public delegate int Mydel(int para1, int para2);
    static int Addfun(int pa1, int pa2)
    {
      return pa1 + pa2;
    }
    static void Main(string[] args)
    {
      Mydel adddel = new Mydel(Addfun);
      IAsyncResult delresult = adddel.BeginInvoke(1, 2, new AsyncCallback(ProcessAfterFunExecute),"s");//异步启动一个线程
      //var result = adddel.EndInvoke(delresult);//等待子线程的执行,拿到线程返回结果
      Thread.Sleep(1000);
      Console.Read();

    }
    static void ProcessAfterFunExecute(IAsyncResult result)
       {
      AsyncResult funAsyncResult = (AsyncResult)result;
      Mydel adddel = (Mydel)funAsyncResult.AsyncDelegate;
      var retval = adddel.EndInvoke(funAsyncResult);
      Console.WriteLine("返回值是:" + retval + "@"+ Thread.CurrentThread.ManagedThreadId);

    }

     3、放弃线程

          abort()方法,强制舍弃线程,内部会出现异常,尽量少使用,会造成程序性能损失

     4、挂起(暂停)线程

          suspend(),挂起此线程。

     5、线程同步

          lock()同步代码块;

原文地址:https://www.cnblogs.com/mingjia/p/4408931.html