C#开启线程的四种示例

 更新时间:2020年10月12日 11:58:55   作者:zls365  
这篇文章主要介绍了C#开启线程的四种方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下

1.异步委托开启线程

public class Program
  {
    public static void Main(string[] args)
    {
      Action<int, int> a = add;
      a.BeginInvoke(3, 4, null, null);
      Console.WriteLine("执行线程");
      Console.ReadKey();
    }
    static void add(int a, int b)
    {
      Console.WriteLine(a + b);
    }
  }

2.通过Thread类开启线程

public class Program
  {
    public static void Main(string[] args)
    {
      Thread t1;
      Thread t2;
      t1 = new Thread(SetInfo1);
      t2 = new Thread(SetInfo2);
      t1.Start();
      //线程睡眠
      //t1.Join(1000);
      //挂起线程
      t1.Suspend();
      //继续执行线程
      t1.Resume();
      //结束线程
      //t1.Abort();
 
      t2.Start();
      Console.ReadKey();
    }
    //奇数线程
    public static void SetInfo1()
    {
      for (int i = 0; i < 100; i++)
      {
        if (i % 2 != 0)
        {
          Console.WriteLine("奇数为" + i);
        }
      }
    }
    //偶数线程
    public static void SetInfo2()
    {
      for (int i = 0; i < 100; i++)
      {
        if (i % 2 == 0)
        {
          Console.WriteLine("偶数为" + i);
        }
      }
    }
  }

3.通过线程池开启线程

//线程池可以看做容纳线程的容器;一个应用程序最多只能有一个线程池;ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池;每排入一个工作函数,就相当于请求创建一个线程;
  //线程池的作用:
  //1、线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。
  //2、如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止
  public class Program
  {
    public static void Main(string[] args)
    {
      ThreadPool.QueueUserWorkItem(new WaitCallback(TestThreadPool), new string[] { "hjh" });
      Console.ReadKey();
    }
    public static void TestThreadPool(object state)
    {
      string[] arry = state as string[];//传过来的参数值
      int workerThreads = 0;
      int CompletionPortThreads = 0;
      ThreadPool.GetMaxThreads(out workerThreads, out CompletionPortThreads);
      Console.WriteLine(DateTime.Now.ToString() + "---" + arry[0] + "--workerThreads=" + workerThreads + "--CompletionPortThreads" + CompletionPortThreads);
    }
  }

4.通过任务Task开启线程

public class Program
  {
    public static void Main(string[] args)
    {
      Task task = new Task(DownLoadFile_My);
      task.Start();
      Console.ReadKey();
    }
    static void DownLoadFile_My()
    {
      Console.WriteLine("开始下载...线程ID:"+Thread.CurrentThread.ManagedThreadId);
      Thread.Sleep(500);
      Console.WriteLine("下载完成!");
    }
  }

以上就是C#开启线程的四种方法汇总的详细内容,更多关于C#开启线程的资料请关注脚本之家其它相关文章!

相关文章

  • C# 获取当前月份天数的三种方法总结

    C# 获取当前月份天数的三种方法总结

    本篇文章主要是对C#中获取目前月份的天数的三种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • C#文件和字节流的转换方法

    C#文件和字节流的转换方法

    这篇文章主要介绍了C#文件和字节流的转换方法,涉及C#将文件以字节流形式读取及将字节流写入文件的相关技巧,需要的朋友可以参考下
    2015-05-05
  • c# 字符串操作总结

    c# 字符串操作总结

    这篇文章主要介绍了c# 字符串操作的相关知识,文中讲解的非常详细,代码帮助大家更好的学习,感兴趣的朋友可以参考下
    2020-06-06
  • 基于C#的图表控件库 ScottPlot编译visual studio 2022

    基于C#的图表控件库 ScottPlot编译visual studio 2022

    基于 C# 的 图表控件库 ScottPlot,开源免费,可以用于开发一些上位机软件,如电压、电流波形的显示,开发【示波器】图形界面,可以显示一些图表、波形,总之功能比较的强大,本文介绍了基于C#的图表控件库 ScottPlot编译visual studio 2022,需要的朋友可以参考下
    2022-06-06
  • WinForm防止程序重复运行的方法分析

    WinForm防止程序重复运行的方法分析

    这篇文章主要介绍了WinForm防止程序重复运行的方法,通过记录窗口句柄实现防止WinForm程序重复运行的功能,需要的朋友可以参考下
    2017-05-05
  • C#使用LINQ查询操作符实例代码(一)

    C#使用LINQ查询操作符实例代码(一)

    这篇文章介绍了C#使用LINQ查询操作符的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#的path.GetFullPath 获取上级目录实现方法

    C#的path.GetFullPath 获取上级目录实现方法

    这篇文章主要介绍了C#的path.GetFullPath 获取上级目录实现方法,包含了具体的C#实现方法以及ASP.net与ASP等的方法对比,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • WinForm使用DataGridView实现类似Excel表格的查找替换功能

    WinForm使用DataGridView实现类似Excel表格的查找替换功能

    这篇文章主要介绍了WinForm使用DataGridView实现类似Excel表格的查找替换功能,现在小编通过本文给大家分享查找替换实现过程,需要的朋友可以参考下
    2021-07-07
  • C#获取目录最后访问时间的方法

    C#获取目录最后访问时间的方法

    这篇文章主要介绍了C#获取目录最后访问时间的方法,涉及C#中LastAccessTime方法的使用技巧,需要的朋友可以参考下
    2015-04-04
  • C# Linq读取XML文件的实例

    C# Linq读取XML文件的实例

    C# Linq读取XML文件的实例,需要的朋友可以参考一下
    2013-05-05

最新评论