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#中使用反射遍历一个对象属性及值的小技巧,这在很时候应该都非常有用,本文直接给出实例代码,需要的朋友可以参考下
    2015-07-07
  • WPF中的ValidationRule实现参数绑定解决方案

    WPF中的ValidationRule实现参数绑定解决方案

    在WPF中,默认情况下,DataContext是通过可视化树来传递的,父元素的DataContext会自动传递给其子元素,以便子元素可以访问父元素的数据对象,这篇文章主要介绍了WPF中的ValidationRule实现参数绑定解决方案,需要的朋友可以参考下
    2023-08-08
  • C#创建简单windows窗体应用(加法器)

    C#创建简单windows窗体应用(加法器)

    这篇文章主要为大家详细介绍了C#创建一个简单windows窗体应用的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • C#实现Oracle批量写入数据的方法详解

    C#实现Oracle批量写入数据的方法详解

    往数据库批量写入数据,这个功能使用频率相对还是比较高的,特别是在做一些导入等功能的时候。本文为大家介绍了C#实现Oracle批量写入数据的方法,需要的可以参考一下
    2022-11-11
  • c# 在windows服务中 使用定时器实例代码

    c# 在windows服务中 使用定时器实例代码

    这篇文章主要介绍了c# 在windows服务中 使用定时器实例代码,有需要的朋友可以参考一下
    2013-12-12
  • C#中WinForm程序退出方法技巧总结

    C#中WinForm程序退出方法技巧总结

    这篇文章主要介绍了C#中WinForm程序退出方法,实例总结了技巧退出WinForm程序窗口的各种常用技巧,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • 浅谈C# 中的委托和事件

    浅谈C# 中的委托和事件

    本篇文章主要介绍C# 中的委托和事件,委托和事件在 .Net Framework中的应用非常广泛,有兴趣的可以了解一下。
    2016-12-12
  • C#批量删除Excel重复项的实现方法

    C#批量删除Excel重复项的实现方法

    当从不同来源导入Excel数据时,可能存在重复的记录,为了确保数据的准确性,通常需要删除这些重复的行,本文将提供一个使用C# 快速查找并删除Excel重复项的免费解决方案,需要的朋友可以参考下
    2024-04-04
  • C#泛型委托的用法实例分析

    C#泛型委托的用法实例分析

    这篇文章主要介绍了C#泛型委托的用法,以实例形式较为详细的分析了C#委托的功能与相关使用技巧,需要的朋友可以参考下
    2015-05-05
  • 深入了解C#多线程安全

    深入了解C#多线程安全

    使用多线程无法避免的一个问题就是多线程安全。那什么是多线程安全?如何解决多线程安全?本文将通过一些简单的例子为大家详细介绍一下多线程相关的问题,感兴趣的可以了解一下
    2021-12-12

最新评论