C#线程详解及应用示例

 简介

在编写应用程序实现业务功能过程中,为解决吞吐量和响应效率的问题,我们会用到多线程、异步编程两项重要的技术。通过它们来提高应用程序响应和高效。应用程序每次运行都会启动一个进程(进程是一种正在执行的程序),而进程中可以包含一个或多个线程,由应用程序入口直接或间接执行的命令都由默认线程(或主线程)执行。

线程概述

线程是任务调度和执行的基本单位。线程是进程的一部分,线程共享该进程的资源。使用多线程技术可解决部分代码同时执行的需求,更好地利用资源。在介绍 C# 线程相关技术点前,先梳理同步、异步、线程安全等几个概念。

1、同步是指多个线程严格按照顺序依次执行,当前线程执行完成后再执行下一个线程。

2、异步是指多个线程的执行顺序是不确定的,每个线程都独立执行,互不干扰。

3、线程安全是指多线程访问共享资源时,保证数据的一致性和完整性,避免出现数据竞争和不一致的结果。

4、争用条件是指多个线程共享访问同一数据时,每个线程都尝试操作该数据,从而导致数据被破坏。

实现方式

在C#语言中,可以通过 Thread 、ThreadPool、Task、Parallel 等类来实现多线程,根据具体特点和场景选择合适的方式来实现。

使用 Thread

通过Thread类实例化 Thread 对象是在构造方法中传入委托对象,Thread 类的构造方法的参数 ThreadStart(无参无返回值的委托)和 ParameterizedThreadStart(有一个object类型参数但无返回值的委托)两种。

通过示例来了解实现无参数的线程


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

namespace Fountain.WinForm.ThreadApp
{
  public partial class ThreadForm : Form
  {
    public ThreadForm()
    {
      InitializeComponent();
    }
    /// <summary>
    /// 显示时间
    /// </summary>
    public void DisplayTime()
    {
      try 
      {
        while (true)
        {
          this.LabelCurrentTime.Invoke(new EventHandler(delegate
          {
            // 访问主界面的控件
            this.LabelCurrentTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
          }));
          Thread.Sleep(10);
        }
      }
      catch 
      {
      }
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void ThreadForm_Load(object sender, EventArgs e)
    {
      try
      {
        // 形式一
        Thread thread = new Thread(DisplayTime);
        // 设置为后台线程
        thread.IsBackground = true;
        // 开启线程
        thread.Start();
        // Lambda表达式代替方法DisplayTime
        Thread lambdaThread =new Thread(()=> 
        {
          this.LabelThreadId.Invoke(new EventHandler(delegate
          {
            // 访问主界面的控件
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fountyuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值