C#winform做了个form,进度条progressbar风格是marquee,可随时更新此form上Label控件显示的信息

这个form需要定义一个属性,要求实例化这个form后,给此属性赋一个字符串,form上的label显示的信息就立即更新(显示赋予的这个字符串),而且进度条要是多线程的(... 这个form需要定义一个属性,要求实例化这个form后,给此属性赋一个字符串,form上的label显示的信息就立即更新(显示赋予的这个字符串),而且进度条要是多线程的(单线程的执行海量任务时进度条会卡住不动),progressbar一直是来回闪动就好,不做其他处理,望大神解决! 展开
 我来答
内裤最大功能
2015-09-11 · TA获得超过3106个赞
知道大有可为答主
回答量:3202
采纳率:79%
帮助的人:494万
展开全部
        private void button3_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(() =>
            {
                //调用控件的invoke函数,表示里面代码将会异步到拥有该控件的线程里执行。
                this.progressBar1.Invoke(new Action<int>(a=>
                    {
                        this.progressBar1.Value=a;
                    }
                    ),80);//80是传递给Invoke()的参数,在这里表示进度条达到的长度
            }
            );
            t.Start();
        }
追问
progressBar不需要做任何处理啊,最关键的是我想随时更新label显示的信息,这个form需要定义一个属性,要求实例化这个form后,给此属性赋一个字符串,form上的label显示的信息就立即更新(显示赋予的这个字符串)!!主要是为了实现这个
追答

道理是一样的。创建新线程,调用控件的Invoke函数。

我把函数拆开来写。清晰一点。

你自己改一下button click函数里面的for循环那部分,改成你自己想要的赋值方式。

        private void button4_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(() =>
                {
                    for (int i = 0; i < 11190; i++)
                    {
                        Change(i.ToString());
                    }
                }
            );
            t.Start();
        }
        public void UpdateLabel(string msg)
        {
            this.label1.Text = msg;
        }
        public void Change(string str)
        {
            Thread t = new Thread(() =>
                {
                    this.label1.Invoke(new Action<string>(UpdateLabel),str);
                }
            );
            t.Start();
        }
匿名用户
2015-10-14
展开全部
你可以单独开个线程给进度条!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式