C# 执行方法时弹窗显示进度条

Tobin_han 2016-01-03 02:34:18
写了一个从数据库中读取数据的方法,有时候数据量很大,执行速度就自然变慢了。我想能不能在执行这个方法的时候弹窗显示一个进度条。 在form1窗体中有个按钮,用来执行方法。点击按钮时弹窗显示进度条。
请技术大牛帮帮忙。
...全文
1722 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
xb_feng 2016-01-05
  • 打赏
  • 举报
回复
BackgroundWorker 控件,就是做这个的
七步777 2016-01-05
  • 打赏
  • 举报
回复
引用 12 楼 Tobin_han 的回复:
我不要什么分页,一个单子就是有500-1000条数据,客户要么导入Excel要么打印。只是想让客户体验好一点,不会出现等待或假死状态。所以需要一个进度条或者图片。
引用 12 楼 Tobin_han 的回复:
我不要什么分页,一个单子就是有500-1000条数据,客户要么导入Excel要么打印。只是想让客户体验好一点,不会出现等待或假死状态。所以需要一个进度条或者图片。
引用 12 楼 Tobin_han 的回复:
我不要什么分页,一个单子就是有500-1000条数据,客户要么导入Excel要么打印。只是想让客户体验好一点,不会出现等待或假死状态。所以需要一个进度条或者图片。
因为不知道还需要多少时间,无法得到准确的百分比。 要求不高的可以做一个假的,显示大概百分比。或者转圈圈。 再就做分页,也只能大概传了多少数据。
Tobin_han 2016-01-05
  • 打赏
  • 举报
回复
我不要什么分页,一个单子就是有500-1000条数据,客户要么导入Excel要么打印。只是想让客户体验好一点,不会出现等待或假死状态。所以需要一个进度条或者图片。
一枚大帅哥 2016-01-05
  • 打赏
  • 举报
回复
使用进度条工具
引用 18 楼 u011672494 的回复:

 public partial class Form1 : Form
    {
        bool funcOver = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = 100;
            progressBar1.Step = 1;
            Thread t = new Thread(new ThreadStart(aquireWork));
            t.IsBackground = true;
            t.Start();
        }
        private void aquireWork()
        {
            int progressN = 0;
            while (progressN <= progressBar1.Maximum - progressBar1.Step)
            {
                if (!funcOver)
                {
                    progressN += progressBar1.Step;
                    SetProg(progressN);
                    Thread.Sleep(10);
                }
                else
                {
                    SetProg(100);
                }
            }
            
        }
        private void SetProg(int p)
        {
            if (progressBar1.InvokeRequired)
            {
                progressBar1.Invoke(new Action(()=>{progressBar1.Value=p;}));
            }
            else
            {
                this.progressBar1.Value = p;
            }
        }
    }
你可以自己测试下 找一个适合你的sleep时间把
这个可以,我之前用过。自己设置合适的进度完成时间。你这查询数据库也没办法查一条,进度动一下,只能大概设置。
m3737337 2016-01-05
  • 打赏
  • 举报
回复
Tobin_han 2016-01-05
  • 打赏
  • 举报
回复
谢谢了,到底怎么做我也不知道。就是执行方法时时间太长了,想加一个弹窗的进度条。显示图片也可以,但是图片如何根据方法的执行时间显示呢。
有时想起 2016-01-05
  • 打赏
  • 举报
回复
引用 20 楼 Tobin_han 的回复:
[quote=引用 18 楼 u011672494 的回复:]

 public partial class Form1 : Form
    {
        bool funcOver = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = 100;
            progressBar1.Step = 1;
            Thread t = new Thread(new ThreadStart(aquireWork));
            t.IsBackground = true;
            t.Start();
        }
        private void aquireWork()
        {
            int progressN = 0;
            while (progressN <= progressBar1.Maximum - progressBar1.Step)
            {
                if (!funcOver)
                {
                    progressN += progressBar1.Step;
                    SetProg(progressN);
                    Thread.Sleep(10);
                }
                else
                {
                    SetProg(100);
                }
            }
            
        }
        private void SetProg(int p)
        {
            if (progressBar1.InvokeRequired)
            {
                progressBar1.Invoke(new Action(()=>{progressBar1.Value=p;}));
            }
            else
            {
                this.progressBar1.Value = p;
            }
        }
    }
你可以自己测试下 找一个适合你的sleep时间把
可以弹窗显示进度条吗?我也不知道sleep时间是多少,那我的读取数据方法怎么调用呢? [/quote] 弹窗显示 你就新建个窗体 进度条写在新窗体里呗,把funcOver 设置成静态变量,sleep时间自己去尝试出合适的 问我我也不知道,这进度条显示跟你读取数据方法怎么样无关
allen0118 2016-01-05
  • 打赏
  • 举报
回复
找个那种表示进度的动画图标,让它自己转一会儿吧,你这要求没那么高,忽悠一下用户得了。
Tobin_han 2016-01-05
  • 打赏
  • 举报
回复
引用 18 楼 u011672494 的回复:

 public partial class Form1 : Form
    {
        bool funcOver = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = 100;
            progressBar1.Step = 1;
            Thread t = new Thread(new ThreadStart(aquireWork));
            t.IsBackground = true;
            t.Start();
        }
        private void aquireWork()
        {
            int progressN = 0;
            while (progressN <= progressBar1.Maximum - progressBar1.Step)
            {
                if (!funcOver)
                {
                    progressN += progressBar1.Step;
                    SetProg(progressN);
                    Thread.Sleep(10);
                }
                else
                {
                    SetProg(100);
                }
            }
            
        }
        private void SetProg(int p)
        {
            if (progressBar1.InvokeRequired)
            {
                progressBar1.Invoke(new Action(()=>{progressBar1.Value=p;}));
            }
            else
            {
                this.progressBar1.Value = p;
            }
        }
    }
你可以自己测试下 找一个适合你的sleep时间把
可以弹窗显示进度条吗?我也不知道sleep时间是多少,那我的读取数据方法怎么调用呢?
有时想起 2016-01-05
  • 打赏
  • 举报
回复

 public partial class Form1 : Form
    {
        bool funcOver = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = 100;
            progressBar1.Step = 1;
            Thread t = new Thread(new ThreadStart(aquireWork));
            t.IsBackground = true;
            t.Start();
        }
        private void aquireWork()
        {
            int progressN = 0;
            while (progressN <= progressBar1.Maximum - progressBar1.Step)
            {
                if (!funcOver)
                {
                    progressN += progressBar1.Step;
                    SetProg(progressN);
                    Thread.Sleep(10);
                }
                else
                {
                    SetProg(100);
                }
            }
            
        }
        private void SetProg(int p)
        {
            if (progressBar1.InvokeRequired)
            {
                progressBar1.Invoke(new Action(()=>{progressBar1.Value=p;}));
            }
            else
            {
                this.progressBar1.Value = p;
            }
        }
    }
你可以自己测试下 找一个适合你的sleep时间把
有时想起 2016-01-05
  • 打赏
  • 举报
回复
引用 18 楼 u011672494 的回复:

 public partial class Form1 : Form
    {
        bool funcOver = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = 100;
            progressBar1.Step = 1;
            Thread t = new Thread(new ThreadStart(aquireWork));
            t.IsBackground = true;
            t.Start();
        }
        private void aquireWork()
        {
            int progressN = 0;
            while (progressN <= progressBar1.Maximum - progressBar1.Step)
            {
                if (!funcOver)
                {
                    progressN += progressBar1.Step;
                    SetProg(progressN);
                    Thread.Sleep(10);
                }
                else
                {
                    SetProg(100);
                    return;
                }
            }
            
        }
        private void SetProg(int p)
        {
            if (progressBar1.InvokeRequired)
            {
                progressBar1.Invoke(new Action(()=>{progressBar1.Value=p;}));
            }
            else
            {
                this.progressBar1.Value = p;
            }
        }
    }
你可以自己测试下 找一个适合你的sleep时间把
补充下
Tobin_han 2016-01-05
  • 打赏
  • 举报
回复
本人还是菜鸟,不懂线程与进程。各位大大可以具体详细一些吗?谢谢了!
有时想起 2016-01-05
  • 打赏
  • 举报
回复
就开个线程做progressbar 用sleep的时间 控制progressbar的进度条显示,可以sleep设定的长一点,期间判断方法是否完成。如果完成 直接进度到100% 就是这样==
正怒月神 2016-01-05
  • 打赏
  • 举报
回复
异步显示一个 gif转圈圈的图片。
youzelin 2016-01-04
  • 打赏
  • 举报
回复
还是分页比较好,经验之谈。你可以很省事的把所有数据导进来。但是你或许没有遇到过真正的企业级的数据量。就拿淘宝来说,你给个关键字,难道他给你全部搜出来,放到 DataSet 里面?你内存不爆吗?我估计让你等上 3 秒,你就不耐烦了。不要说进度条了。
青狂不轻狂gg 2016-01-04
  • 打赏
  • 举报
回复
最好是分页,或者优化你的查询语句,如果还是执行比较长的时间,那么可以建立索引,存储过程,实在不行的,在建议其他的等待操作
toukenha 2016-01-03
  • 打赏
  • 举报
回复
百度下backgroundworker,网上很多例子
衣舞晨风 2016-01-03
  • 打赏
  • 举报
回复
引用 7 楼 Tobin_han 的回复:
[quote=引用 6 楼 xunzaosiyecao 的回复:]
starfd的方法就挺好,比如找一个一直转圈的图片



starfd是什么?执行方法的时候启动转圈的图片,那如何让图片根据方法的执行时间长短来结束呢?[/quote]
Tobin_han 2016-01-03
  • 打赏
  • 举报
回复
引用 6 楼 xunzaosiyecao 的回复:
starfd的方法就挺好,比如找一个一直转圈的图片
starfd是什么?执行方法的时候启动转圈的图片,那如何让图片根据方法的执行时间长短来结束呢?
衣舞晨风 2016-01-03
  • 打赏
  • 举报
回复
starfd的方法就挺好,比如找一个一直转圈的图片
加载更多回复(5)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧