c#使用ThreadPool

这篇具有很好参考价值的文章主要介绍了c#使用ThreadPool。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        说到ThreadPool,都知道是线程池。在c#中,有很多方式可以实现线程。从时间上来排序,大概是这样的,Thread,backgroundworker,ThreadPool,Parallel,Task。其中后面2种是最新的,之前的很少使用,如果是老项目,基本上前面用的多,而新项目,最好使用后面的2种,因为后面的效率以及各方面控制更加的容易上手,需要开发者考虑的问题,也更加的少,使用起来简单方便。

        程序中使用线程,可以帮助程序更加快速的处理计算问题,但是不是线程越多就越好,new线程同样也会消耗掉资源。

下面示例使用ThreadPool。

1.业务是,启动程序后,一个进行加法运算,一个进行减法运算,并且界面可以移动。

c#使用ThreadPool,# 基础知识,.net

2.代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;  //加上后,可以不需要使用Invoke
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ThreadPool.QueueUserWorkItem(A);
            ThreadPool.QueueUserWorkItem(B);
        }

        private void A(object a)
        {
            for (int i = 0; i < 20; i++)
            {
                Thread.Sleep(1000);
                label1.Text = i.ToString();
                //Invoke(new Action(() => label1.Text = i.ToString()));
            }

        }

        private void B(object b)
        {
            for (int i = 0; i < Convert.ToInt16(label2.Text); i++)  //界面的值设置100
            {
                Thread.Sleep(1000);
                label2.Text = (Convert.ToInt16(label2.Text) - 1).ToString();
                //Invoke(new Action(() => label2.Text = (Convert.ToInt16(label2.Text) - 1).ToString()));
            }

        }
    }
}

3.效果

 c#使用ThreadPool,# 基础知识,.net

拓展

1.其中WaitCallback是一个带有参数的方法,所以上面案例,需要传递一个object对象,可见,属于多次一举,但是规定就是这样的。 

   public static bool QueueUserWorkItem(WaitCallback callBack)
   public delegate void WaitCallback(object state);

2.如果调用的方法,需要传递参数,那么使用下面的方式

public static bool QueueUserWorkItem(WaitCallback callBack, object state)

c#使用ThreadPool,# 基础知识,.net

此时a的变量就是666。 

3.如果把上面的逻辑修改一下,先让加法运行,后让减法运行,那么需要使用信号量去控制。

3.1界面如下

运行后,点击开始

c#使用ThreadPool,# 基础知识,.net

3.2代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        ManualResetEvent manual = new ManualResetEvent(false);
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;  //加上后,可以不需要使用Invoke
        }

        private void Form1_Load(object sender, EventArgs e)
        {


        }

        private void A(object a)
        {
            for (int i = 0; i < 20; i++)
            {
                Thread.Sleep(1000);
                label1.Text = i.ToString();
                //Invoke(new Action(() => label1.Text = i.ToString()));
            }
            manual.Set();    //执行A
        }

        private void B(object b)
        {
            for (int i = 0; i < Convert.ToInt16(label2.Text); i++)  //界面的值设置100
            {
                Thread.Sleep(1000);
                label2.Text = (Convert.ToInt16(label2.Text) - 1).ToString();
                //Invoke(new Action(() => label2.Text = (Convert.ToInt16(label2.Text) - 1).ToString()));
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            ThreadPool.QueueUserWorkItem(A);
            manual.WaitOne();//等待A执行完毕
            ThreadPool.QueueUserWorkItem(B);
        }
    }
}

3.2效果

c#使用ThreadPool,# 基础知识,.net

来源:c#使用ThreadPool_c# threadpool_故里2130的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-572522.html

到了这里,关于c#使用ThreadPool的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习C#基础知识和应用:

    C#语言基础知识:了解C#的开发环境、变量、语法和程序结构等基础内容。这些知识是理解和开发C#自动化控制系统的前提。刚好,我这里有上位机入门,学习线路图,各种项目,需要留个6。 Winform窗体控件的应用:Winform窗体控件是C#自动化控制系统的核心部分。学习基础控件

    2024年02月16日
    浏览(40)
  • C#基础知识点记录

    视频 calculator.repoort() 加括号表示调用方法 calculator.repoort 表示方法名 c# 了解 1.net 运行平台上,运行vb,c#,c++语言(.net环境为vb,c#,c++封装了各种工具包) .net core跨平台开发(可运行win linux) 相当于java开发工具包jdk上,包含java运行环境(jre,jvm+java系统类库)和java工具 2.c#工具

    2024年02月11日
    浏览(50)
  • c#使用ThreadPool

            说到ThreadPool,都知道是线程池。在c#中,有很多方式可以实现线程。从时间上来排序,大概是这样的,Thread,backgroundworker,ThreadPool,Parallel,Task。其中后面2种是最新的,之前的很少使用,如果是老项目,基本上前面用的多,而新项目,最好使用后面的2种,因为后面

    2024年02月16日
    浏览(20)
  • Unity C# 之 使用 HttpWebRequest 基础知识/HttpWebRequest 进行异步Post 网络访问/数据流形式获取数据(Task/async/await)的代码简单实现

    目录 Unity C# 之 使用 HttpWebRequest 基础知识/HttpWebRequest 进行异步Post 网络访问/数据流形式获取数据(Task/async/await)的代码简单实现 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、关键代码 附录 : HttpWebRequest 的一些基础知识 1、HttpWebRequest 常用属性 2、HttpWebRequest 

    2024年02月05日
    浏览(58)
  • 【ASP.NET Core 基础知识】--安全性--防范常见攻击

    在现实网络中即存在着安全的流量,又存在着不安全的流量在,这些不安全的流量常常会对我们的网站服务造成威胁,严重的甚至会泄露用户的隐私信息。这篇文章我们通过对常见的网络攻击 跨站脚本攻击 、 跨站请求伪造(CSRF) 、 SQL注入 、 敏感数据泄露 、 身份验证与授权

    2024年02月20日
    浏览(57)
  • 【ASP.NET Core 基础知识】--部署和维护--性能优化技巧

    一、应用程序设计和架构优化 1.1 选择适当的设计模式 应用程序设计和架构优化是提高 ASP.NET Core 应用程序性能的重要方面之一。适当的设计模式是优化架构的关键之一。设计模式是解决特定问题的经验总结,能够提高代码的可读性、可维护性和可扩展性,从而间接地提高了

    2024年02月20日
    浏览(55)
  • C#,入门教程(15)——类(class)的基础知识

    上一篇: C#,入门教程(14)——字符串与其他数据类型的转换 https://blog.csdn.net/beijinghorn/article/details/124004562 物以类聚,凡物必类。 类的使用,须遵循几个简单的原则: (1)能类则类,留有余地。 (2)凡数据体及其集合,必写为类; (3)凡类,必独立文件; 类class实际上可

    2024年01月20日
    浏览(43)
  • C#,入门教程(20)——列表(List)的基础知识

    上一篇: C#,入门教程(19)——循环语句(for,while,foreach)的基础知识 https://blog.csdn.net/beijinghorn/article/details/124060844 List顾名思义就是数据列表,区别于数据数组(array)。 List比数组提供强大得多!多!多!多!的功能,能存储更多!多!多!类型的数据(泛型)! List是更

    2024年01月16日
    浏览(53)
  • 【ASP.NET Core 基础知识】--路由和请求处理--路由概念(一)

    在Web应用中,路由是一个至关重要的概念,它负责将用户的请求映射到相应的处理程序,以确保正确的页面或资源被呈现给用户。通过将用户请求与适当的处理程序关联起来,使得应用能够以有序和可维护的方式响应用户的操作。 一、ASP.NET Core路由基础 1.1 路由的定义和作用

    2024年01月19日
    浏览(68)
  • 【ASP.NET Core 基础知识】--路由和请求处理--路由概念(二)

    一、路由参数传递方式 1.1 查询字符串参数 在路由中,查询字符串参数是一种常见的方式传递信息。这种方式通过URL中的查询字符串(?key1=value1key2=value2)将参数附加到请求中。在ASP.NET Core中,可以通过以下方式在控制器动作方法中接收查询字符串参数: 在上述例子中,查询

    2024年01月21日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包