社区
C#
帖子详情
加载进度条问题的探讨
九章落地
2007-03-19 04:44:53
我现在做一个登录窗体,点击登录按钮后执行下面动作:
1、更新本地数据库。
2、打开主窗体,并关掉登录窗体。
因为执行时间有点长,我想加入一个进度条。
小弟对多线程编程一知半解,在BackgroudWorker的DoWork事件里,如何计算动作执行完成的百分比呢?如何得到窗体的Show方法所用的时间呢?
虚心向各位高手请教,谢谢!
...全文
911
15
打赏
收藏
加载进度条问题的探讨
我现在做一个登录窗体,点击登录按钮后执行下面动作: 1、更新本地数据库。 2、打开主窗体,并关掉登录窗体。 因为执行时间有点长,我想加入一个进度条。 小弟对多线程编程一知半解,在BackgroudWorker的DoWork事件里,如何计算动作执行完成的百分比呢?如何得到窗体的Show方法所用的时间呢? 虚心向各位高手请教,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
haipingma
2007-05-30
打赏
举报
回复
study
甴曱
2007-03-20
打赏
举报
回复
//你测试一下下面这个代码。
public interface ISplashForm
{
void SetStatusInfo(string NewStatusInfo);
}
public class Splasher
{
private static Form m_SplashForm = null;
private static ISplashForm m_SplashInterface = null;
private static Thread m_SplashThread = null;
private static string m_TempStatus = string.Empty;
/// <summary>
/// 显示过渡窗口
/// </summary>
public static void Show(Type splashFormType)
{
if (m_SplashThread != null)
return;
if (splashFormType == null)
{
throw (new Exception("splashFormType is null"));
}
m_SplashThread = new Thread(new ThreadStart(delegate()
{
CreateInstance(splashFormType);
Application.Run(m_SplashForm);
}));
m_SplashThread.IsBackground = true;
m_SplashThread.SetApartmentState(ApartmentState.STA);
m_SplashThread.Start();
}
/// <summary>
/// 设置载入状态
/// </summary>
public static string Status
{
set
{
if (m_SplashInterface == null || m_SplashForm == null)
{
m_TempStatus = value;
return;
}
m_SplashForm.Invoke(
new SplashStatusChangedHandle(delegate(string str) { m_SplashInterface.SetStatusInfo(str); }),
new object[] { value }
);
}
}
/// <summary>
/// 关闭过渡窗口
/// </summary>
public static void Close()
{
if (m_SplashThread == null || m_SplashForm == null) return;
try
{
m_SplashForm.Invoke(new MethodInvoker(m_SplashForm.Close));
}
catch (Exception)
{
}
m_SplashThread = null;
m_SplashForm = null;
}
private static void CreateInstance(Type FormType)
{
object obj = FormType.InvokeMember(null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);
m_SplashForm = obj as Form;
m_SplashInterface = obj as ISplashForm;
if (m_SplashForm == null || m_SplashInterface == null)
{
throw (new Exception());
}
if (!string.IsNullOrEmpty(m_TempStatus))
m_SplashInterface.SetStatusInfo(m_TempStatus);
}
private delegate void SplashStatusChangedHandle(string NewStatusInfo);
}
调用实例:
加一窗口:public class Form1 :Form,ISplashForm{
public Form1();
}
//==========================
//调用:
Splasher.Show(typeof(Form1));
//设置状态:
Splasher.Status="……";
Thread.Sleep(500);
//关闭:
Splasher.Close();
//:)
zhulei2008
2007-03-20
打赏
举报
回复
不知道楼主是想在BS上还是CS上实现???
CS上有个进度条的控件.
BS上找个图片过渡下就行了
j_lei407
2007-03-20
打赏
举报
回复
mark
gui0605
2007-03-20
打赏
举报
回复
没有百分百的准确,只能是大概估计
honkerhero
2007-03-20
打赏
举报
回复
UP,拉个进度条,估个数据赋上,隔时间变值,推进一下事件处理就行了
weiyong922
2007-03-20
打赏
举报
回复
up
kissknife
2007-03-20
打赏
举报
回复
其实LZ的主要问题应该是如何才能知道1,2两个操作各自执行时间,或者它们的比例。
对于“1、更新本地数据库。”还有可能比较准确地知道进度,
对于“2、打开主窗体,并关掉登录窗体。”应该没有办法
要在一个进度条里显示1,2的进度,简单的作法是,用1/2来表示第一步操作,第剩下的1/2来表示第二步操作,或者其他比例。
很多软件都是这样的,你比如“瑞星”升级时的进度窗口,也是分割成一部分一部分显示的,
所以进度条某一段慢某一段快..
其实进度条也不需要很准确,都是“骗人”的..
《仅供参考..
灰太狼
2007-03-20
打赏
举报
回复
to 我就是想知道如何比较准确地控制ProgressBar的刻度.
这个不太可能,因为无法知道准确的时间,只能是大概估计一下。
九章落地
2007-03-20
打赏
举报
回复
设置ProgressBar的Style属性为Marquee,这种方式行不通,因为我们这边用的都是Windows 2000系统,不支持此效果.
我是通过取远程数据库的数据来更新本地数据库,所以量大时速度比较慢,我就是想知道如何比较准确地控制ProgressBar的刻度.
真的没有好法子吗?
ms44
2007-03-20
打赏
举报
回复
使用BackGroundworker可能会比较好。
其中它有一个代表当前进度的属性, 这样就可以很好的让用户知道确切的进度。
hertcloud
2007-03-20
打赏
举报
回复
具体的时间
无法算出来的
楼主可以 直接用一个窗体上 显示一个ProgressBar,设置Style=Marquee就是了
如果需要 楼主 也可以
show个窗体 显示 一个gif动画条...
burn3tt
2007-03-20
打赏
举报
回复
其实查询状态并不是可以在查询进行中知道的,楼主可以测试一下本机查询百万条记录的时间,相除一下,得出查询一条记录时间。然后在查询之前得出待查询的条数,两者相乘大体就是总运行时间。
其实可以按照二楼说的办法,做一个假的就行,因为本地登录的话,速度应该很快,一闪就过去了
wzq6511
2007-03-20
打赏
举报
回复
up
Fan52027
2007-03-19
打赏
举报
回复
按照楼主的情况,基本可以不永多线程,加个ProgressBar,设置Style=Marquee;假的进度条好啦
android自定义
进度条
仿win8效果
自定义
加载
数据
进度条
,仿win8效果,教会你一步一步实现自定
进度条
,项目中可以直接使用,详解讲解请参考: http://blog.csdn.net/jakeyangchina/article/details/54413523如对资源内容有疑问,可以到博客中留言,...
Vue页面骨架屏注入方法
这就是这篇文章将要
探讨
的
问题
。 文章相关代码已经同步到 Github ,欢迎查阅~ 一、何为骨架屏 简单来说,骨架屏就是在页面内容未
加载
完成的时候,先使用一些图形进行占位,待内容
加载
完成之后再把它替换掉。 这个...
recommendation_engines
我们
探讨
了三种类型的推荐系统:基于知识的协作过滤和基于内容的推荐系统: 基于知识 使用有关符合用户规范的项目的知识来推荐项目。 协同过滤 基于使用用户项目交互的协作。 基于内容 使用有关项目的信息来查找...
asp.net知识库
帮助解决网页和JS文件中的中文编码
问题
的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个...
如何实现图片预
加载
和
加载
进度条
一种常见的方法是在页面
加载
时预
加载
图片,并展示一个
加载
进度条
,让用户了解
加载
进度。属性为传入的 URL,从而触发图片的
加载
,在每个图片
加载
成功后,用数组长度计算出百分比更新
加载
进度并将
加载
的图片添加到页面...
C#
110,538
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章