服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#多线程Thread使用示例详解

C#多线程Thread使用示例详解

2022-11-25 12:23空山新雨 C#

这篇文章主要为大家详细介绍了C#多线程Thread使用示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家分享了C#多线程Thread使用的示例代码,供大家参考,具体内容如下:

多线程:

C#多线程Thread使用示例详解

线程生命周期状态图:

C#多线程Thread使用示例详解

C#线程优先级(概率高低):

C#多线程Thread使用示例详解

C#多线程Thread使用示例详解

基本使用示例:

using System;
using System.Threading;

namespace month_9_10._1009
{
  class Run5
  {
      /* 测试线程的调用过程
       * 主线程输出world,子线程输出hello
       */
      public static void showHello()
      {
          for(int i = 0; i < 100; i++)
          {
              Console.WriteLine($"Hello\t#{Thread.CurrentThread.Name}");
          }
      }
      public static void Main(string[] args)
      {
          Thread.CurrentThread.Name = "Main Thread!";
          var childThreadRef = new ThreadStart(showHello);
          Console.WriteLine("This is Main process!!!");
          var childThread = new Thread(childThreadRef);
          childThread.Name = "Child Thread!";
          childThread.Start();
          for (int i = 0; i < 100; i++)
          {
              Console.WriteLine($"World!\t#{Thread.CurrentThread.Name}");
          }
      }
  }
}

实例1:窗体标签循环滚动

C#多线程Thread使用示例详解

using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace RollMove
{
  public partial class Form1 : Form
  {
      Thread th1 = null;
      public Form1()
      {
          InitializeComponent();
          
      }
      private void Form1_Load(object sender, EventArgs e)
      {
          int _sx = 40;
          int _ex = 280;
          int _top = 70;
          th1 = new Thread(() => {
              while (true)
              {
                  if (_sx <= _ex)
                  {
                      _ex = 280;
                      label1.Location = new Point(_sx, _top);
                      Thread.Sleep(20);
                      _sx += 5;
                  }
                  else
                  {
                      _ex = 40;
                      label1.Location = new Point(_sx, _top);
                      Thread.Sleep(20);
                      _sx -= 5;
                  }
              }
          });
          th1.Start();
      }

      private void Form1_FormClosed(object sender, FormClosedEventArgs e)
      {
          if (th1!=null)
          {
              th1.Abort();
          }
      }
  }
}

实例2:进度条

C#多线程Thread使用示例详解

using System;
using System.Threading;
using System.Windows.Forms;

namespace month_9_10._1012
{
  public partial class Form_3 : Form
  {
      public static Print.Print print = Console.WriteLine;
      Thread th1, th2;
      public Form_3()
      {
          InitializeComponent();
          Text = "Welcome!";
          CheckForIllegalCrossThreadCalls = false;
          th1 = new Thread(new ThreadStart(Pro1));
          th1.Priority = ThreadPriority.Lowest;
          th1.Start();
          th2 = new Thread(new ThreadStart(Pro2));
          th2.Priority = ThreadPriority.Highest;
          //th2.Start();
          print(th1.Priority);
          print(th2.Priority);
          
      }

      void Pro1()
      {
          print("XXXXXXX");
          for (int i = 0; i <= 100; i++)
          {
              
              progressBar1.Value = i;
              label1.Text = $"{progressBar1.Value}%";
              Thread.Sleep(200);
              if (i == 20)
              {
                  th2.Start();
                  th2.Join();
              }
          }
      }
      void Pro2()
      {
          print("YYYYYYYY");
          for (int i = 0; i <= 100; i++)
          {
              progressBar2.Value = i;
              label2.Text = $"{progressBar2.Value}%";
              Thread.Sleep(100);
          }
      }

      private void progressBar1_Click(object sender, EventArgs e)
      {
          print("This is Main threading!");
      }

      private void Form_3_Load(object sender, EventArgs e)
      {

      }

      private void Form_3_FormClosing_1(object sender, FormClosingEventArgs e)
      {
          if (th1.ThreadState == ThreadState.Running)
              th1.Abort();
          if (th2.ThreadState == ThreadState.Running)
              th2.Abort();
      }
  }
}

实例三:线程同步(售票模拟)

using System;
using System.Threading;

namespace month_9_10._1012
{
  class Run2
  {
      static Print.Print print = Console.WriteLine;
      int _num = 10;
      void Ticket()
      {
          while (true)
          {
              //上锁
              //lock (this)
              //{
              //    if (_num > 0)
              //    {
              //        Thread.Sleep(100);
              //        print(Thread.CurrentThread.Name + "--票数:" + _num--);
              //    }
              //}

              //放置监视器
              Monitor.Enter(this);
              if (_num > 0)
              {
                  Thread.Sleep(100);
                  print(Thread.CurrentThread.Name + "--票数:" + _num--);
              }
              Monitor.Exit(this);
          }
      }
      static void Main()
      {
          var a1 = new Run2();
          Thread t1 = new Thread(new ThreadStart(a1.Ticket));
          t1.Name = "线程一";
          Thread t2 = new Thread(new ThreadStart(a1.Ticket));
          t2.Name = "线程二";
          Thread t3 = new Thread(new ThreadStart(a1.Ticket));
          t3.Name = "线程三";
          Thread t4 = new Thread(new ThreadStart(a1.Ticket));
          t4.Name = "线程四";
          t1.Start();
          t2.Start();
          t3.Start();
          t4.Start();
      }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_42292831/article/details/102472414

延伸 · 阅读

精彩推荐
  • C#C#结构体特性实例分析

    C#结构体特性实例分析

    这篇文章主要介绍了C#结构体特性,以实例形式较为详细的分析了C#结构体的功能、定义及相关特性,具有一定参考借鉴价值,需要的朋友可以参考下...

    清清飞扬4942021-10-28
  • C#C#基础之泛型

    C#基础之泛型

    泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。接下来通过本文给大家介绍c#基础之泛型,感兴趣的朋友一起学习吧...

    方小白7872021-12-03
  • C#浅析C# 函数的传值与传址

    浅析C# 函数的传值与传址

    这篇文章主要介绍了C# 函数的传值与传址,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...

    野性狼心5672022-10-18
  • C#C# 将字节流转换为图片的实例方法

    C# 将字节流转换为图片的实例方法

    C# 将字节流转换为图片的实例方法,需要的朋友可以参考一下...

    C#教程网1862020-12-18
  • C#C#使用OpenCV剪切图片中的人物头像的实现方法

    C#使用OpenCV剪切图片中的人物头像的实现方法

    这篇文章主要介绍了C#使用OpenCV剪切图片中的人物头像,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    Kiba5183532022-11-02
  • C#C#对图片进行马赛克处理可控制模糊程度的实现代码

    C#对图片进行马赛克处理可控制模糊程度的实现代码

    本文通过实例代码给大家介绍了C#对图片进行马赛克处理可控制模糊程度的实现方法,代码超简单,具有一定的参考借鉴价值,感兴趣的朋友跟随脚本之家...

    Andrewniu6542022-02-24
  • C#c# 数据标注与数据校验

    c# 数据标注与数据校验

    这篇文章主要介绍了c# 数据标注与数据校验的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...

    精致码农 • 王亮9292022-10-10
  • C#C# 使用Winform 获取下拉框 选中的值

    C# 使用Winform 获取下拉框 选中的值

    这篇文章主要介绍了C# 使用Winform 获取下拉框 选中的值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    enych8352022-10-27