C#编程总结(四)多线程应用

多线程应用很广泛,简单总结了一下:

1)不阻断主线程,实现即时响应,由后台线程完成特定操作

2)多个线程,完成同类任务,提高并发性能

3)一个任务有多个独立的步骤,多个线程并发执行各子任务,提高任务处理效率

下面我们通过几个小例子做简单介绍。

1、进度条

分析:页面动态刷新,主页面正常可操作。我们通过后台线程来实现进度条。

首先,创建Winform页面,然后拖入进度条控件,将页面的代码改为以下代码即可。

这里只是个简单的例子,其实我们可以做的更好,将进度条封装为一个自定义控件,设计为一个通用 好看的进度条。这里只讲技术和方向,大家可以自己研究研究。

相关代码:

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

namespace ProgressBarSample
{
    //定义委托,异步调用
    delegate void ShowProgressDelegate(int totalStep, int currentStep);
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnStart_Click(object sender, EventArgs e)
        {
            ParameterizedThreadStart start = new ParameterizedThreadStart(SetProgress);
            Thread progressThread = new Thread(start);
            progressThread.IsBackground = true;//标记为后台进程,在窗口退出时,正常退出
            progressThread.Start();
        }
        /// <summary>
        /// 设置当前进度
        /// </summary>
        /// <param name="state"></param>
        void SetProgress(object state)
        {
            for (int i = 1; i <= 100; i++)
            {
                Thread.Sleep(200);
                object[] objs = new object[] { 100, i };
                //异步调用
                this.Invoke(new ShowProgressDelegate(ShowProgress), objs);
            }
        }
        /// <summary>
        /// 刷新进度条
        /// </summary>
        /// <param name="totalStep"></param>
        /// <param name="currentStep"></param>
        void ShowProgress(int totalStep, int currentStep)
        {
            this.progressBar1.Maximum = totalStep;
            this.progressBar1.Value = currentStep;

            this.lbCurrent.Text = this.progressBar1.Value * 100 / progressBar1.Maximum + "%";
        }
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索线程
, 多线程
, using
, system
, 进度
, 任务
多线程总结
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-12-11 11:40:28

C#编程总结(四)多线程应用的相关文章

5天玩转C#并行和多线程编程 —— 第四天 Task进阶

5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 -- 第一天 认识Parallel 5天玩转C#并行和多线程编程 -- 第二天 并行集合和PLinq 5天玩转C#并行和多线程编程 -- 第三天 认识和使用Task 5天玩转C#并行和多线程编程 -- 第四天 Task进阶 5天玩转C#并行和多线程编程 -- 第五天 多线程编程大总结    一.Task的嵌套   Task中还可以再嵌套Task,Thread中能不能这样做,我只能说我是没这样写过.Task中的嵌套,我感觉其实

服务器-CPU的多核心和编程里面的多线程有关联么

问题描述 CPU的多核心和编程里面的多线程有关联么 之前不知道哪里听说的服务器软件都是进程型的,所以服务器主机不要性能强的多核,要很多性能若的电脑分布式组合.java里面的多线程是为了节省程序自己的等待时间而设的,和电脑的核心数量有关系么.如果我的代码只有一个主线程,那么四核的电脑是不是只能用一个核心?因为可能要搭建小型服务器,提前了解下硬件方面的需求,大概也就服务1万人的微信群,对服务器有什么要求.一个是内存够大,另一个就是cpu了. 解决方案 有关系,首先Java线程底层的实现就是轻量级的进

CUDA编程(四)并行化我们的程序

CUDA编程(四) CUDA编程(四)并行化我们的程序 上一篇博客主要讲解了怎么去获取核函数执行的准确时间,以及如何去根据这个时间评估CUDA程序的表现,也就是推算所谓的内存带宽,博客的最后我们计算了在GPU上单线程计算立方和的程序的内存带宽,发现其内存带宽的表现是十分糟糕的,其所使用的内存带宽大概只有 5M/s,而像GeForce 8800GTX这样比较老的显卡,也具有超过50GB/s 的内存带宽 . 面对我们首先需要解决的内存带宽问题,我们首先来分析这个问题,然后我们将使用并行化来大大改善这

udp聊天程序-UDP聊天程序MFC编程如何使用多线程

问题描述 UDP聊天程序MFC编程如何使用多线程 想创建一个线程用于循环接收信息,如何创建?目前有连接按钮,发送按钮和接收按钮三个按钮,如何操作可以去掉接收按钮而不影响接收功能?目前接收按钮是while循环,如何没有数据传入,按接收时程序会死掉!求大神赐教- 解决方案 http://blog.sina.com.cn/s/blog_73df887801019171.htmlhttp://blog.sina.com.cn/s/blog_73df8878010191q7.html http://www

Android编程开发实现多线程断点续传下载器实例_Android

本文实例讲述了Android编程开发实现多线程断点续传下载器.分享给大家供大家参考,具体如下: 使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,比如无信号断线.电量不足等情况下,这就需要使用到断点续传功能,下次启动时从记录位置继续下载,可避免重复部分的下载.这里采用数据库来记录下载的进度. 效果图:   断点续传 1.断点续传需要在下载过程中记录每条线程的下载进度 2.每次下载开始之前先读取数据库

艾伟:C#多线程学习(四) 多线程的自动管理(线程池)

本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习(五) 多线程的自动管理(定时器) C#多线程学习(六) 互斥对象 在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPool(线程池)来解决: 另一种情况:线程平时都处于休眠状态,只是周期性地被

Android编程开发实现多线程断点续传下载器实例

本文实例讲述了Android编程开发实现多线程断点续传下载器.分享给大家供大家参考,具体如下: 使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,比如无信号断线.电量不足等情况下,这就需要使用到断点续传功能,下次启动时从记录位置继续下载,可避免重复部分的下载.这里采用数据库来记录下载的进度. 效果图: 断点续传 1.断点续传需要在下载过程中记录每条线程的下载进度 2.每次下载开始之前先读取数据库,查

PHP 高级编程之多线程(四)-多线程与ZeroMQ

PHP 高级编程之多线程 http://netkiller.github.io/journal/thread.php.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT)     中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 +86 755 29812080<netkiller@msn.com> 版权 2011, 2012, 2013, 2014 http://netkiller.github.io 版权声明 转载请与作

Python多线程编程(四):使用Lock互斥锁_python

前面已经演示了Python:使用threading模块实现多线程编程二两种方式起线程和Python:使用threading模块实现多线程编程三threading.Thread类的重要函数,这两篇文章的示例都是演示了互不相干的独立线程,现在我们考虑这样一个问题:假设各个线程需要访问同一公共资源,我们的代码该怎么写? 复制代码 代码如下: ''' Created on 2012-9-8   @author: walfred @module: thread.ThreadTest3 '''  impor

linux多线程编程(四)_Linux

linux线程分为两类:一是核心级支持线程,二是用户级的线程.一般都为用户级的线程. 一.多线程的几个常见函数 要创建多线程必须加载pthread.h文件,库文件pthread.线程的标识符pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:typedef  unsigned  long  int  pthread_t 1.创建线程: int pthread_create(pthread_t *restrict thread,