zoukankan      html  css  js  c++  java
  • C# 委托及线程

    一、简述

      简单记录一下C#涉及的委托及线程知识点,以便随时可查询。

    二、内容

      C#的线程有以下6种方法实现:

      1、Thread 线程类;

      2、Delegates 委托;

      3、Backgroud Worker;

      4、ThreadPool 线程池;

      5、Task 任务类;

      6、Parallel 并行类。

      以上的方法使用时建议使用Lambda 表达式,因其delegate参数类型多变,不好掌控。

      C#的委托调用有以下2种方法:

      1、BeinInvoke => 异步调用,EndInvoke => 获得异步调用的返回值(方法没执行完毕之前会一直阻塞);

      在C#中,任何涉及BeginXXX与EndXXX名字的方法都是异步。

      2、Invoke => 同步调用;

      在Control中用以上2种方法都会造成界面假死,因为这是UI线程。

      Winform界面Invoke用法示例:

    public void TestFunction(int ms)
    {
      lblContent.Text += "开始;";
      Thread.Sleep(ms);
      lblContent.Text += "结束";
    
    }
    public void Main()
    {
      //this.Invoke(new Action<int>(TestFunction),3000);  //输出字体与界面同步出现
      this.BeinInvoke(new Action<int>(TestFunction),3000);  //界面出现后假死,然后才出现输出字体。
      lblContent.Text += "abc;";
    }

      执行结果:

      Inoke:开始;结束;abc;

      BeinInvoke:abc;开始;结束;

      Winform界面委托用法示例:

    public void TestFunction(int ms)
    {
      lblContent.Text += "开始;";
      Thread.Sleep(ms);
      lblContent.Text += "结束";
    
    }
    public void Main()
    {
      Action<int> action = TestFunction;
      //action.Invoke(3000);  //界面输出字体与界面同步出现
      action.BeinInvoke(3000, null, null);  //界面不会假死,先出现“abc;开始;”,3秒后出现“结束;” 
      lblContent.Text += "abc;";
    }

      执行结果:

      Inoke:开始;结束;abc;

      BeinInvoke:abc;开始;结束;

  • 相关阅读:
    hdu 1895 Sum Zero hash
    hdu 4277 USACO ORZ dfs+hash
    hdu 6010 Daylight Saving Time 泰勒公式
    Codeforces Round #FF (Div. 2) D. DZY Loves Modification 优先队列
    Codeforces Round #113 (Div. 2) B. Polygons Andrew求凸包
    poj 3304 Segments 线段与直线相交
    gym 101081 gym F. Auction of Services 最小生成树+倍增LCA
    hdu 1558 Segment set 线段相交+并查集
    gym 101081 E. Polish Fortress 几何
    SPOJ
  • 原文地址:https://www.cnblogs.com/kongbailingluangan/p/14670434.html
Copyright © 2011-2022 走看看