C# 窗体加载时非常慢,怎样添加一个进度条?

trentsu-true 2014-06-13 01:07:14
使用了很多PICBOC,想弄个进度条,怎么实现?
...全文
1499 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ramble_Naylor 2015-08-03
  • 打赏
  • 举报
回复
windows from的以前在学校里面做过了的,现在要做一个网页上面的,搜了好多代码,但是都没有什么用,大致的思路我知道,我就是不知道“线程”,不知道怎么判断我的网页什么时候加载完毕了
aae_2641421639 2014-06-14
  • 打赏
  • 举报
回复
在控件中显示进度的百分比的例子 private void timer1_Tick(object sender,EventArgs e) { if(this.progressBar1.Value == this.progressBar1.Maximum)//当进度条的当前值等于最大值时 { this.progressBar1.Value = this.progressBar1.Minimum;//设置进度条的当前值为最小值 } else //当进度条的当前值小于最大值时 { this.progressBar1.PerformStep();//按指定的增量增加进度条中的进度块 }//在CodeGo.net中看见的 int percentValue = 100 * //将当前进度转化为百分比的形式 (this.progressBar1.Value - this.progressBar1.Minimum) / (this.progressBar1.Maximum - this.progressBar1.Minimum); label1.Text = percentValue.ToString() + "%";//在Label中显示百分比的值 } private void StartOrStop_Click(object sender,EventArgs e) { if(timer1.Enabled)//当Timer处于可用状态时 { timer1.Enabled = false;//设置Timer为不可用状态 StartOrStop.Text = "开始";//设置“开始”按钮上的文本内容为“开始” } else//当Timer处于不可用状态时 { timer1.Enabled = true;//设置Timer为可用状态 StartOrStop.Text = "停止";//设置“停止”按钮上的文本内容为“停止” } }//仅供参考。
lhsyszh 2014-06-14
  • 打赏
  • 举报
回复
窗体加载时,所处理的过程可以输出到进度窗体中,不需要做一个假的,真实的查看执行到哪一步了,网上有很多的,
  • 打赏
  • 举报
回复
引用 7 楼 u012801821 的回复:
[quote=引用 3 楼 itoccupant 的回复:] 最好用线程了 ,搞个线程异步就ok了 有时间可以进http://www.51zxw.net/study.asp?vip=8963801这个网站看哈 适合爱学习的发掘
具体怎么实现呢?[/quote] 这个得靠你自己去搞 主要知识点 1. 线程 要把线程设置成后台线程 2. 线程同步 我现在太忙了 要不帮你写出来
marcherx 2014-06-13
  • 打赏
  • 举报
回复
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 WinForm
{
    public partial class ProgressBarFrm : Form
    {
        public ProgressBarFrm()
        {
            InitializeComponent();
        }

        private void ProgressBarFrm_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }
        public static ProgressBarFrm _ProgressBarFrm;
        private void timer1_Tick(object sender, EventArgs e)
        {
            progressBar1.Value++;
            if (progressBar1.Value == 10)
                timer1.Stop();
        }
        public static void Run()
        {
            _ProgressBarFrm = new ProgressBarFrm();
            _ProgressBarFrm.Show();
        }
        public static void CloseFrm()
        {
            if (_ProgressBarFrm != null)
            {
                _ProgressBarFrm.Stop();
                _ProgressBarFrm = null;
            }
    
        }
        public void Start()
        {
            Show();
            timer1.Start();
        }
        public void Stop()
        {
            timer1.Stop();
            for (int i = progressBar1.Value; i < 100; i++)
            {
                progressBar1.Value++;
                
            }
            Thread.Sleep(500);
            this.Hide();
            this.Close();
        }
    }
}
namespace WinForm
{
    partial class ProgressBarFrm
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.progressBar1 = new System.Windows.Forms.ProgressBar();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            this.SuspendLayout();
            // 
            // progressBar1
            // 
            this.progressBar1.Location = new System.Drawing.Point(12, 67);
            this.progressBar1.Name = "progressBar1";
            this.progressBar1.Size = new System.Drawing.Size(570, 40);
            this.progressBar1.TabIndex = 0;
            // 
            // timer1
            // 
            this.timer1.Interval = 250;
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
            // 
            // ProgressBarFrm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.BackColor = System.Drawing.Color.LightBlue;
            this.ClientSize = new System.Drawing.Size(594, 162);
            this.Controls.Add(this.progressBar1);
            this.DoubleBuffered = true;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Name = "ProgressBarFrm";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "ProgressBarFrm";
            this.TopMost = true;
            this.Load += new System.EventHandler(this.ProgressBarFrm_Load);
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.ProgressBar progressBar1;
        private System.Windows.Forms.Timer timer1;
    }
}
可以试着调用这个。winform的。 ProgressBarFrm.Run();
gooodiuck 2014-06-13
  • 打赏
  • 举报
回复
线程中加载一个包含进度条的窗体,主程序运行完后后,给进程窗体一个参数。用来判断程序加载完成
全局变量 2014-06-13
  • 打赏
  • 举报
回复
你是要用系统的进度条还是,自己定义的进度条。 不过原理都一样,都是控制一个线程管理这个进度条的生命周期。 手打不易,谢谢支持~

private void Form1_Load(object sender, EventArgs e)  
        {  
            Thread thread = new Thread(threadFrom);//创建新线程  
            thread.Start();  
          /***开始加载任务**/
        /***结束时销毁线程***/
         thread .Abort();
        }  


public void threadFrom()  
        {  
             MethodInvoker MethInvo = new MethodInvoker(ShowForm2);  
             BeginInvoke(MethInvo);  
        }  
        public void ShowForm()  
        {  
            Form2 f2 = new Form2();  
            f2.Show();  
        }  
tinydyw 2014-06-13
  • 打赏
  • 举报
回复
引用 8 楼 u012801821 的回复:
[quote=引用 2 楼 bdmh 的回复:] 可以啊,进度条可以放到主界面上,或者弹出一个界面,搞个timer在哪不停的滚动 可以在program.cs中,运行主窗体前就弹出来,然后等到主窗体加载完,再销毁这个窗口
试过,这个挺假的,有什么方法让他不卡么?[/quote] 可以试试双缓冲...这个你百度一下...如果这个不对的话..我建议你异步加载图片.这样可以做一个进度条 不过这个进度条只能反映图片加载的进度就是了..
trentsu-true 2014-06-13
  • 打赏
  • 举报
回复
引用 2 楼 bdmh 的回复:
可以啊,进度条可以放到主界面上,或者弹出一个界面,搞个timer在哪不停的滚动 可以在program.cs中,运行主窗体前就弹出来,然后等到主窗体加载完,再销毁这个窗口
试过,这个挺假的,有什么方法让他不卡么?
trentsu-true 2014-06-13
  • 打赏
  • 举报
回复
引用 3 楼 itoccupant 的回复:
最好用线程了 ,搞个线程异步就ok了 有时间可以进http://www.51zxw.net/study.asp?vip=8963801这个网站看哈 适合爱学习的发掘
具体怎么实现呢?
trentsu-true 2014-06-13
  • 打赏
  • 举报
回复
引用 5 楼 tinydyw 的回复:
只能做一个假的..不然你不知道窗体渲染控件到了哪一步 就没办法实时控制进度条....
我也发现le,那是个假的。请问有什么方法能让他不卡么?
tinydyw 2014-06-13
  • 打赏
  • 举报
回复
只能做一个假的..不然你不知道窗体渲染控件到了哪一步 就没办法实时控制进度条....
trentsu-true 2014-06-13
  • 打赏
  • 举报
回复
引用 2 楼 bdmh 的回复:
可以啊,进度条可以放到主界面上,或者弹出一个界面,搞个timer在哪不停的滚动 可以在program.cs中,运行主窗体前就弹出来,然后等到主窗体加载完,再销毁这个窗口
我和同学在做一个登录界面,和主窗体,登录界面不卡,登录成功后,进入主界面非常慢慢大概2-3秒.很是恼火。
  • 打赏
  • 举报
回复
最好用线程了 ,搞个线程异步就ok了 有时间可以进http://www.51zxw.net/study.asp?vip=8963801这个网站看哈 适合爱学习的发掘
bdmh 2014-06-13
  • 打赏
  • 举报
回复
可以啊,进度条可以放到主界面上,或者弹出一个界面,搞个timer在哪不停的滚动
可以在program.cs中,运行主窗体前就弹出来,然后等到主窗体加载完,再销毁这个窗口
exception92 2014-06-13
  • 打赏
  • 举报
回复
这并非一句话能说清的,动手百度吧。不难。

110,536

社区成员

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

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

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