在C#做一个启动窗体放一个进度条来显示主窗体加载的进度 我想做一个欢迎界面,里面放一个进度条来显示主窗体加载的进度,当主窗体加载完时,也就是进度条的value为100时,欢迎窗口退出,而主窗体出来..怎么做呢??? 该如何得到主窗体加载的进度? 希望哪位能给个源码,让偶学习学习...感谢感谢感谢感谢... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 或者开始主窗体就没有加载,等欢迎界面到100之后,设置dialogresult为OK,然后再加载主窗体 修改程序的入口 program.cs[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);//form1是欢迎界面。 Application.Run(new Form1()); } #region 后台工作的backgroundworker private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { //进度条具体自己弄 int progress =5; worker.ReportProgress(progress); while (progress <= 80) { progress += 8; backgroundWorker1.ReportProgress(progress); } } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { toolStripProgressBar1.Value = e.ProgressPercentage; } //进度条完成后做的事情(关闭欢迎) private void backgroundWorker1_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e) { ... } 给你个提示,看看有用吗。增加一个展示窗体,进度条放这里,然后在后台开始new 主窗体在主窗体构造函数中开始计数每执行一段语句,增加估计差不多的值加载完的时候为100然后关闭展示窗体,显示主窗体,OK! 进度条是一个软件人性化考虑之一,他给用户的感觉就是程序内部在不停的动作,执行到了什么程度,而不是整个界面僵死,以至于用户不知道程序在做什么! 看了好几个WinForm程序了,发现他们对进度条的处理完全失去了进度条的作用。他们都是采用Timer来处理,在线程结束的时候,直接赋值进度条达到100%。和我以前做WebForm程序的时候完全不一样,做WebForm程序的时候,进度条是根据总体数据和每步执行后而计算和更新的。在看了这几个WinForm程序后,我在想:是否所有WinForm程序,在进度条的处理上都不能保证实时进度显示? 其实用Timer来处理,不停的更新进度条只是程序作者偷懒的方法。当然这样的好处就是可以简单化处理进度条,代码量少,不易出错,调试方便。 还有一种方法,就是可以及时更新进度条的数据的。那就是采用事件驱动机制,在子线程中监视复杂处理过程中的设定的事件,及时更新!直接看代码: 程序代码using System;using System.ComponentModel;using System.Windows.Forms;namespace WindowsApplication1{ /// <summary> /// Form1 类 /// </summary> public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //用子线程工作 new System.Threading.Thread(new System.Threading.ThreadStart(StartDownload)).Start(); } //开始下载 public void StartDownload() { Downloader downloader = new Downloader(); downloader.onDownLoadProgress += new Downloader.dDownloadProgress(downloader_onDownLoadProgress); downloader.Start(); } //同步更新UI void downloader_onDownLoadProgress(long total, long current) { if (this.InvokeRequired) { this.Invoke(new Downloader.dDownloadProgress(downloader_onDownLoadProgress), new object[] { total, current }); } else { this.progressBar1.Maximum = (int)total; this.progressBar1.Value = (int)current; } } } /// <summary> /// 下载类(您的复杂处理类) /// </summary> public class Downloader { //委托 public delegate void dDownloadProgress(long total,long current); //事件 public event dDownloadProgress onDownLoadProgress; //开始模拟工作 public void Start() { for (int i = 0; i < 100; i++) { if (onDownLoadProgress != null) onDownLoadProgress(100, i); System.Threading.Thread.Sleep(100); } } }} 在登录和主窗体中再加一个或者面板。把进度条放在面板上面,并把这个面板设置为不显示,然后加一个时钟控件。点用户点击登录,并且验证通过后,调用时钟控件,激活它,进度条的值可以先设为2,当进度条的值没到100时,时钟就一直运行,这样到了100,就设定时钟停止,再把进度条界面隐藏,再show出主窗体,主要思路就是这样了。 排序(比较复杂) vs2008关闭解决方案时卡死 C# 中读取XML中的信息 谁懂C++.net请进来一下,谢~ 线程该如何使用? SqlServer分页的问题 gridcontrol控件怎么获取从表的选中单元的值啊? 抽象类中的非抽象方法可以调用抽象方法么 C#windows上位机串口数据接收 哪里有C#关键字的详细介绍!? 十六进制与汉字转换? 【50分】一个很让人汗颜的初级问题,同志们帮忙
program.cs
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//form1是欢迎界面。
Application.Run(new Form1());
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//进度条具体自己弄
int progress =5;
worker.ReportProgress(progress);
while (progress <= 80)
{
progress += 8;
backgroundWorker1.ReportProgress(progress);
}
}
private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
toolStripProgressBar1.Value = e.ProgressPercentage;
}
//进度条完成后做的事情(关闭欢迎)
private void backgroundWorker1_RunWorkerCompleted(
object sender, RunWorkerCompletedEventArgs e)
{
...
}
增加一个展示窗体,进度条放这里,
然后在后台开始new 主窗体
在主窗体构造函数中开始计数
每执行一段语句,增加估计差不多的值
加载完的时候为100
然后关闭展示窗体,显示主窗体,
OK!
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsApplication1
{
/// <summary>
/// Form1 类
/// </summary>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//用子线程工作
new System.Threading.Thread(new System.Threading.ThreadStart(StartDownload)).Start();
}
//开始下载
public void StartDownload()
{
Downloader downloader = new Downloader();
downloader.onDownLoadProgress += new Downloader.dDownloadProgress(downloader_onDownLoadProgress);
downloader.Start();
}
//同步更新UI
void downloader_onDownLoadProgress(long total, long current)
{
if (this.InvokeRequired)
{
this.Invoke(new Downloader.dDownloadProgress(downloader_onDownLoadProgress), new object[] { total, current });
}
else
{
this.progressBar1.Maximum = (int)total;
this.progressBar1.Value = (int)current;
}
}
} /// <summary>
/// 下载类(您的复杂处理类)
/// </summary>
public class Downloader
{
//委托
public delegate void dDownloadProgress(long total,long current);
//事件
public event dDownloadProgress onDownLoadProgress;
//开始模拟工作
public void Start()
{
for (int i = 0; i < 100; i++)
{
if (onDownLoadProgress != null)
onDownLoadProgress(100, i);
System.Threading.Thread.Sleep(100);
}
}
}
}