欢迎来到雅狐站长网!
兔子CDN

C#教程

当前位置:主页 > 软件教程 > C#教程 >

C# 中如何使用Thread

时间:2021-04-27 09:28:41|栏目:C#教程|点击:

线程是进程中的最小执行单元,多线程是指在给定时间内拥有多个线程的能力,并且可以调度它们从而在某一时刻处理多个操作,微软的 .Net Framework 提供了 Thread 来帮助我们完成多线程开发。

Thread 编程

要想使用 Thread,需要在程序中引用 System.Threading 命名空间,然后再提供一个供线程调度的方法,这个方法是通过 Thread 中的 ThreadStart 委托代理的,下面的代码展示了如何创建线程。

Thread t = new Thread(new ThreadStart(MyThreadMethod));

线程创建好之后,还需要调用 Start 方法去启动,下面的代码展示了如何去实现,哦,对了,上面的 MyThreadMethod方法会在新的线程上被调度,而不是调用线程。

  class Program
  {
    static void Main(string[] args)
    {
      Thread t = new Thread(new ThreadStart(MyThreadMethod));
      t.Start();
      Console.Read();
    }
    static void MyThreadMethod()
    {
      Console.WriteLine("Hello World!");
    }
  }

展示线程状态

一个创建好的线程,它的生命周期内会有多个状态,比如:Aborted, Background, Running, Stopped, Suspended, Unstarted 等等,这些状态在 Thread 中是用 ThreadState 枚举表示的,如下代码所示:

  [Flags]
  public enum ThreadState
  {
    Running = 0,
    StopRequested = 1,
    SuspendRequested = 2,
    Background = 4,
    Unstarted = 8,
    Stopped = 16,
    WaitSleepJoin = 32,
    Suspended = 64,
    AbortRequested = 128,
    Aborted = 256
  }

当一个 Thread 对象创建好之后,它的状态就是 Unstarted,然而当 Start 方法启动之后,线程的状态将会从 Unstarted 切换到 Running 状态,下面的代码展示了这种轮转。

    static void Main(string[] args)
    {
      Thread t = new Thread(new ThreadStart(MyThreadMethod));
      Console.WriteLine("The thread's state is:" + t.ThreadState.ToString());
      t.Start();
      Console.WriteLine("The thread's state is:" + t.ThreadState.ToString());
    }

C# 中如何使用Thread

控制线程的 前台和后台

一个线程要么是前台线程要么是后台线程,如果你是通过显式的方式创建线程,它便是前台线程,前后线程最大的区别在于:应用程序退出的前提必须是程序内的所有前台线程都得到退出,相反,应用程序的退出不依赖于后台线程。

你可以通过 IsBackground 属性来设置 Thread 的前台或者后台,下面的代码展示了如何去实现。

    static void Main(string[] args)
    {
      Thread t = new Thread(new ThreadStart(MyThreadMethod));
      t.Start();
      t.IsBackground = true;
      Console.WriteLine(“The thread's background status is: “+t.IsBackground.ToString());
      Console.Read();
    }

除了启动线程,还可以通过 Suspend() 和 Resume() 方法来 挂起 和 恢复 线程, 值得注意的是,你只能 恢复 你之前通过 Suspend 方法 挂起的线程,如下代码所示:

    static void Main(string[] args)
    {
      Thread t = new Thread(new ThreadStart(MyThreadMethod));
      t.Start();
      t.Suspend(); //Suspends the newly created thread
      t.Resume(); //Resumes the suspended thread
      Console.Read();
    }

值得注意的是,现在的 Thread.Suspend() Thread.Resume() 方法都是被标记成弃用的状态了,取而代之的做法是:使用 AutoResetEventEventWaitHandle 方法来实现多线程之间的同步。

设置线程优先级

可以给一个线程赋予优先级,从而和内存中的其他线程争抢 CPU 时间,在 C# 中是使用 ThreadPriority 枚举来表示,大体上有如下值: Lowest, BelowNormal, Normal, AboveNormal 和 Highest,下面的代码展示了如何给这两个线程赋予优先级。

  class Program
  {
    static void Main(string[] args)
    {
      Thread thread1 = new Thread(new ThreadStart(Method1));
      Thread thread2 = new Thread(new ThreadStart(Method2));

      thread1.Priority = ThreadPriority.Highest;
      thread2.Priority = ThreadPriority.Lowest;

      thread2.Start();
      thread1.Start();

      Console.Read();
    }
    static void Method1()
    {
      for (int i = 0; i < 10; i++)
      {
        Console.WriteLine("First thread: " + i);
      }
    }
    static void Method2()
    {
      for (int i = 0; i < 10; i++)
      {
        Console.WriteLine("Second thread: " + i);
      }
    }
  }

C# 中如何使用Thread

从上面的输出结果中可以看出,Thread1 先于 Thread2 执行完,即使 Thread2.Start 是先启动的,是不是很好的演示了优先级的概念。

上一篇:C# 关于爬取网站数据遇到csrf-token的分析与解决

栏    目:C#教程

下一篇:在C# 8中如何使用默认接口方法详解

本文标题:C# 中如何使用Thread

本文地址:http://www.cnzzww.cn/ccjiaocheng/56494.html

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ: | 邮箱:111#qq.com(#换成@)

Copyright © 2015-2020 雅狐站长网 版权所有 苏ICP备20040415号