问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

C# 多线程方法 控制两个进度条

发布网友 发布时间:2022-04-27 08:13

我来回答

5个回答

热心网友 时间:2022-04-27 09:42

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 Demo0004  
{  
    public partial class Form1 : Form  
    {  
        public Form1()  
        {  
            InitializeComponent();  
        }  
  
        //线程开始的时候调用的委托  
        private delegate void maxValueDelegate(int maxValue);  
        //线程执行中调用的委托  
        private delegate void nowValueDelegate(int nowValue);  
  
        private void button1_Click(object sender, EventArgs e)  
        {  
            ThreadMethod method = new ThreadMethod();  
            //先订阅一下事件  
            method.threadStartEvent += new EventHandler(method_threadStartEvent);  
            method.threadEvent += new EventHandler(method_threadEvent);  
            method.threadEndEvent += new EventHandler(method_threadEndEvent);  
  
            Thread thread = new Thread(new ThreadStart(method.runMethod));  
            thread.Start();  
        }  
  
        /// <summary>  
        /// 线程开始事件,设置进度条最大值  
        /// 但是我不能直接操作进度条,需要一个委托来替我完成  
        /// </summary>  
        /// <param name="sender">ThreadMethod函数中传过来的最大值</param>  
        /// <param name="e"></param>  
        void method_threadStartEvent(object sender, EventArgs e)  
        {  
            int maxValue = Convert.ToInt32(sender);  
            maxValueDelegate max = new maxValueDelegate(setMax);  
            this.Invoke(max, maxValue);  
        }  
  
        /// <summary>  
        /// 线程执行中的事件,设置进度条当前进度  
        /// 但是我不能直接操作进度条,需要一个委托来替我完成  
        /// </summary>  
        /// <param name="sender">ThreadMethod函数中传过来的当前值</param>  
        /// <param name="e"></param>  
        void method_threadEvent(object sender, EventArgs e)  
        {  
            int nowValue = Convert.ToInt32(sender);  
            nowValueDelegate now = new nowValueDelegate(setNow);  
            this.Invoke(now, nowValue);  
        }  
  
        /// <summary>  
        /// 线程完成事件  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        void method_threadEndEvent(object sender, EventArgs e)  
        {  
            MessageBox.Show("执行已经完成!");  
        }  
  
        /// <summary>  
        /// 我被委托调用,专门设置进度条最大值的  
        /// </summary>  
        /// <param name="maxValue"></param>  
        private void setMax(int maxValue)  
        {  
            this.progressBar1.Maximum = maxValue;  
        }  
  
        /// <summary>  
        /// 我被委托调用,专门设置进度条当前值的  
        /// </summary>  
        /// <param name="nowValue"></param>  
        private void setNow(int nowValue)  
        {  
            this.progressBar1.Value = nowValue;  
        }  
    }  
  
  
    public class ThreadMethod  
    {  
        /// <summary>  
        /// 线程开始事件  
        /// </summary>  
        public event EventHandler threadStartEvent;  
        /// <summary>  
        /// 线程执行时事件  
        /// </summary>  
        public event EventHandler threadEvent;  
        /// <summary>  
        /// 线程结束事件  
        /// </summary>  
        public event EventHandler threadEndEvent;  
  
        public void runMethod()  
        {  
            int count = 100;      //执行多少次  
            threadStartEvent.Invoke(count, new EventArgs());//通知主界面,我开始了,count用来设置进度条的最大值  
            for (int i = 0; i < count; i++)  
            {  
                Thread.Sleep(100);//休息100毫秒,模拟执行大数据量操作  
                threadEvent.Invoke(i, new EventArgs());//通知主界面我正在执行,i表示进度条当前进度  
            }  
            threadEndEvent.Invoke(new object(), new EventArgs());//通知主界面我已经完成了  
        }  
    }

热心网友 时间:2022-04-27 11:00

你是两个标签页

通过不同的线程来控制这两个进度条

互不干扰

如果是winform的可以用backgroundworker来实现

或者用thread

现在不明白你遇到了什么问题

热心网友 时间:2022-04-27 12:35

最重要的是要实现异步。
其实就是你的代码逻辑与界面呈现,异步来做。互不干涉。
用多线程吧。
开条线程,执行你的代码,没执行一次,就触发个事件。
界面就订阅这个事件。每收到一次事件就更新一下进度条。

异步的处理。
如果是 WinForm ,那就 this.BeginInvoke(.......
如果是 WPF,就 this.Dispacher.BeginInvoke(....

热心网友 时间:2022-04-27 14:26

开2个线程,每个线程控制一个进度条。

热心网友 时间:2022-04-27 16:34

Magicalsoft说的不错,再就是你这个问题问得并不是太清楚,大家回答的不会太具体
c# 我做了2个进度条,1个是单个文件下载的进度,一个是总的下载进度,但是...

所以这个时候就要使用多线程(Thread)了,你这种情况,刷新进度条要单独一个线程,下载处理要单独一个线程,还有程序本身的进程,总共需要三个进程。给你个代码片段吧,关於多线程详细知识可以百度之。using System.Threading;……//线程定义,也可以这样://Thread th = new Thread(new ThreadStart(void...

...怎么才能使得在做两个for循环的时候,进度条一点一点的向前滚,而不...

这是因为你的for循环与gui线程是同一条,所以只有在执行完所有循环以后才会刷新processbar。解决方法是将循环放到另一个线程中,然后通过委托来更新processbar就可以了。

C#进度条怎么多线程使用

根据面向对象原则,value只是控制的一个属性,而刷新或重绘也控件一个方法。所以要相互配合才可以。当然正常的情况下,ProgressBar已经实现了一个具体成员方法,那就是PreformStep/Increment成员方法。设置ProgressBar的当前值(默认为最小值)和Step(每次步进值。然后每次调用PreformStep,则会将Value增加一个S...

c# 做数据加载时候的一个进度条

两个线程,一个线程读取数据,一个线程设置进度条进度。后者靠前者给的数据来知道当前到什么进度了,当然,两个线程之间肯定就要有通信,比如发送自定义消息。我说的这个办法适用于windows下所有的开发语言,无论c#还是vc++

c#实现两个进度条互相关联

就只是跑进度条,而不是和实际的某个进度相关吗?如果只是跑进度条,我给你代码。如果是进度条和其他进程相关,这个写起来太多了,只能给你个思路。所以,先说一下究竟是要哪种?

如何显示进度条

使用C#显示进度条,涉及到多线程编程,我只探索了使用BackgroundWorker和Thread的方法,下面分别列出。第一种:使用BackgroundWorker进行进度条控制 BackgroundWorker对象有三个主要的事件:DoWork - 当BackgroundWorker对象的多线程操作被执行时触发。RunWokerCompleted - 当BackgroundWoker对象的多线程操作完成...

C#Winform中,我在查询数据时等待时间过长,想用一个进度条显示机器正在...

首先正式查询数据之前先查询下一共有多少跳记录 count一下 这个速度应该很快的 声明一个变量 currentNum 来记录当前取到多少条数据 然后用datareader来读取数据,每读一条currentNum累加 当前进度为currentNum / 总条数 这样用这样进度条就可以实现了 当然要在界面上显示 肯定是要做多线程处理的 ...

c#应用程序的进度条控件怎么使用啊?

1把进度条控件从工具箱中拖出2用线程启动查询方法 如:progressBarValue = 0; progressBarVisible = true; new SystemThreadingThread(delegate() { while (progressBarValue + 10 &lt; progressBarMaximum) { thisInvoke(func, progressBc#应用程序的进度条控件怎么使用啊?

C# 怎么保证两个任务同时完成或同时失败

如果是数据库可以用事务,程序的话就得直接写判断了

C#中为什么进度条不能执行完,也就是进度没到运行底

进度条的Paint过程是单独一个线程的,无论你的主线程如何处理都控制不了这个线程。你只能等系统处理完消息队列才能看到正常的效果。处理这个等待的过程有人用System.Threading.Thread.Sleep(1000)过程,加延时的思路是对的,但是技术不对症。我们的目地是让系统把消息队列处理完,而不是系统去睡觉!想让...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
初一下册语文29课马地课后题2:文章在描述马的外在特征时,用了许多其... 求八年级上册语文陪练答案29课的 ...网络舆情中心上班的吗?待遇如何,需要上夜班吗,哪位知道请告知_百度... ...会计从业资格证。想继续往上考,是不是要一级一级往上考呢?还是可以... 资格证是不是一级一级的考证,初级-中级-高级? 会计职称一般要考到哪一级呢? 如何封阳台比较好 低楼层封阳台用什么材料好-封阳台什么材料实用便宜 初级中级会计要逐级考吗 ...怎么才能拿到注册会计师的证,是需要一级一级的往上考么?注册会计师... GB口袋怪兽钻石攻略 钻石GD/EX/VG是什么意思 炫舞里GB怎么卖 我有一个1.5克拉的钻石现需要钱 颜色F-G VV1 EX 大概能卖多少钱啊 没有证书了 级别真实 好玩吧交易所USBT怎么换钻石? 好玩吧卖钻石流程 建筑的外墙面积怎么算?有什么计算公式吗 ? 建筑面积与墙体面积比例是多少 外墙面积14平米 实际面积 我想下载评书,但是不知道怎么下载? 谁知道怎样下载评书?请赐教! 手机连接wifi最多只能达到50mbps,是真的吗? 农村信用社个人贷款申请条件 积分的查询渠道? 聚美优品官网上买的大品牌是真的么 请问聚美优品上面的产品是不是都是真的 聚美优品上的商品是正品吗 怎么查看自己名下的贷款 怎么查到自己所有的贷款 聚美优品卖的都是正品吧!我都是在聚美买的护肤品,因为是学生党,感觉价格比较合适。但是有点担心? 安卓机里的用户体验可以删除吗? 注册了如何取消 什么是股票的跳水和跌停 什么木材做的剑鞘比较好 黑檀和酸枝木哪个更适合做刀鞘 龙泉刀剑鞘用木材哪一种好 刀鞘用什么材料做最好,用金属做好吗?感觉皮革和木材做的不好,是要配唐刀的。 我在百度找了一下做朴么做刀鞘,怎么这没有还有的说用松木和柏木,这两种木材行么 酥肉扣碗,条子肉扣碗,丸子肉扣碗都怎么制做 万州藕圆子扣碗的做法大全 这个中药方干什么用的?君药是什么?臣药是什么 保济丸的君药 臣药 佐药 使药分别指哪几味药? 会中药的进来帮帮忙 我听我老师说了一个痛泻药方,里面有白芍,甘草,还有别的,有知道这个药方详细信息的给我说一下, ps里扫描文件章不清怎样把章加深 怎样在photoshop中将盖的章变得颜色更鲜艳些 跪求 有一首歌的音调和,一万个舍不得 ,差不多 女声 很好听,请帮我想想 千万个对不起你不要再哭泣是什么歌曲? &quot;说一万遍对不起,不如一句我爱你&quot;一个女生唱的快歌,还有一句歌词是“lalalala……” 其中有一句是“对你说一万句对不起,到最后只能选择放弃”这首原创歌曲谁知道在哪里下载?
  • 焦点

最新推荐

猜你喜欢

热门推荐