亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#子線(xiàn)程執(zhí)行完后通知主線(xiàn)程的方法

 更新時(shí)間:2016年12月05日 10:07:43   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇C#子線(xiàn)程執(zhí)行完后通知主線(xiàn)程的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

其實(shí)這個(gè)比較簡(jiǎn)單,子線(xiàn)程怎么通知主線(xiàn)程,就是讓子線(xiàn)程做完了自己的事兒就去干主線(xiàn)程的轉(zhuǎn)回去干主線(xiàn)程的事兒。

那么怎么讓子線(xiàn)程去做主線(xiàn)程的事兒呢,我們只需要把主線(xiàn)程的方法傳遞給子線(xiàn)程就行了,那么傳遞方法就很簡(jiǎn)單了委托傳值嘛;

下面有一個(gè)例子,子線(xiàn)程干一件事情,做完了通知主線(xiàn)程

public class Program
  {
    //定義一個(gè)為委托
    public delegate void Entrust(string str);
    static void Main(string[] args)
    {
      Entrust callback = new Entrust(CallBack); //把方法賦值給委托
      Thread th = new Thread(Fun);
      th.IsBackground = true;
      th.Start(callback);//將委托傳遞到子線(xiàn)程中
      Console.ReadKey();
    }
    private static void Fun(object obj) {
      //注意:線(xiàn)程的參數(shù)是object類(lèi)型
      for (int i = 1; i <= 10; i++)
      {
        Console.WriteLine("子線(xiàn)程循環(huán)操作第 {0} 次",i);
        Thread.Sleep(500);
      }
      Entrust callback = obj as Entrust;//強(qiáng)轉(zhuǎn)為委托
      callback("我是子線(xiàn)程,我執(zhí)行完畢了,通知主線(xiàn)程");
      //子線(xiàn)程的循環(huán)執(zhí)行完了就執(zhí)行主線(xiàn)程的方法
    }
    //主線(xiàn)程的方法
    private static void CallBack(string str) {
      Console.WriteLine(str);
    }
  }

上面就是一個(gè)通過(guò)委托進(jìn)行向主線(xiàn)程傳值(也就是通知主線(xiàn)程)的過(guò)程,上面我們是自己定義了一個(gè)委托,當(dāng)然我們也可以使用.NET為我們提供的Action<>和Fun<>泛型委托來(lái)處理,就像這樣

public class Program
  {
    //定義一個(gè)為委托
    public delegate void Entrust(string str);
    static void Main(string[] args)
    {
      Action<string> callback = ((string str) => { Console.WriteLine(str); });
      //Lamuda表達(dá)式
      Thread th = new Thread(Fun);
      th.IsBackground = true;
      th.Start(callback);
      Console.ReadKey();
    }
    private static void Fun(object obj) {
      for (int i = 1; i <= 10; i++)
      {
        Console.WriteLine("子線(xiàn)程循環(huán)操作第 {0} 次",i);
        Thread.Sleep(500);
      }
      Action<string> callback = obj as Action<string>;
      callback("我是子線(xiàn)程,我執(zhí)行完畢了,通知主線(xiàn)程");
    }

  }
 //上面的Lamuda表達(dá)式也可以回城匿名函數(shù)
 //Action<string> callback = delegate(string str) { Console.WriteLine(str); };

下面是運(yùn)行結(jié)果

以上這篇C#子線(xiàn)程執(zhí)行完后通知主線(xiàn)程的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論