首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 100分求做一个假进度条,高手请进,马上给分!!!
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • czk0808
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-05-27 10:25:59 楼主
    我目前有一个自己做的查询,代码如下:
    C# code
    private void button1_Click(object sender, EventArgs e)//执行查询 { this.Cursor = Cursors.WaitCursor; //获取鼠标的形状,为沙漏形状 DateTime KaiShi = DateTime.Now; Pffx_hz(); //这个是一个查询的函数,主要是这里要的时间很长; Pffx_gyd();//这个是另外一个查询的函数,主要也是这里要的时间很长; DateTime Eend = DateTime.Now; TimeSpan XiangCha = Eend - KaiShi; string zhixing = XiangCha.Minutes + "" + XiangCha.Seconds + ""; this.Cursor = Cursors.Default; //获取鼠标为正常形状 MessageBox.Show("此查询一共用时:" + zhixing, "提示"); }

    以上是一部分代码,我的关键是要在执行这个查询的时候,同时显示一个假进度条,不至于查询很长时间结果出来的中间好像死机一样,给个进度条给客户看到好些,请问各位高手,我应该怎么操作?

    给个代码最好,马上给分!!
    200  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zlhxinxi83
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 10:28:521楼 得分:0
    不知道Pffx_hz()和Pffx_gyd()具体代码是什么 ? 我做的一次进度条的 是根据for循环来控制整个进度条的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zlhxinxi83
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 10:36:052楼 得分:0
    ProgressBar 可以用这个控件


    C# code
    private void btnSubmit_Click(object sender, EventArgs e) { prbState.Visible = true; prbState.Minimum = 0; prbState.Step = 1; prbState.Value = 0; prbState.Maximum = 100; forint i=0;i<100;i++) { prbState.PerformStep(); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • czk0808
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 10:36:163楼 得分:0
    可以吧把你的方法贴出来看看吗?
    Pffx_hz()和Pffx_gyd()是两个做好的函数,我只要执行这两个函数就可以得到我要的结果,现在是我不知道这两个函数大概要花多少时间,
    如果可以,我想大概定义一个时间,让时间慢慢走,然后走到90%的时候,再根据结果到100%完成.

    可以实现吗?

    知道的高手请指点或代码,我的Email:czk0505@163.com

    解决后马上给分,不够可以加分的.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • 43720938
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 10:37:044楼 得分:0
    参考http://topic.csdn.net/u/20080526/17/c213d64e-b570-4a9b-a41a-59f96f042685.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • czk0808
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 10:48:115楼 得分:0
    2楼的这个不行.

    因为你这个无法控制我的两个查询,如果把你这段代码放在前面的法,那进度条就直接一下到100%,然后才开始执行我下面的代码;

    如果我放在我的下面的法,那是等我结果出来了才执行你这个,也就是说要等查询结果出来了,进度条才一下就到100%,这些都不是我想要的;

    我想应该要用到多线程吧?

    但是不晓得怎么搞!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dreamsnake
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:00:316楼 得分:0
    因为查询时间无法判定,所以,真的是个假进度条.
    既然是假的,你就再开一个线程,估算一下时间,然后略慢于检索的时间,让它慢慢走吧.那边的查询一结束,就把这个进度条结束掉就是了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • huang_8228
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:01:187楼 得分:0
    改变ProgressBar控件的Value值,可以不停的翻来覆去的滚嘛,走到头了又从0开始,等执行完了把进度条关掉好了,因为你不知道你的具体的执行时间的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • czk0808
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:08:358楼 得分:0
    6楼的大哥,你这个想法是对的,但是我要怎么实现呢,可以给我代码示例不?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • czk0808
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:23:529楼 得分:0
    6楼和7楼的兄弟,帮帮忙,解决解决这个问题!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinjazz
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 5

    发表于:2008-05-27 11:25:5410楼 得分:0
    参考
    http://blog.csdn.net/jinjazz/archive/2008/05/24/2477088.aspx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhangxiaolei422
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:30:2511楼 得分:0
    楼主!拿分来!真的pageloading!是真的!o(∩_∩)o...哈哈

    HTML code
    <html> <head> <title></title> <script type="text/javascript"> var url = 'http://www.google.co.uk/search?hl=en&q=asp.net&meta='; //the details page you want to display... </script> <style> .loading-indicator { font-size:8pt; background-image:url(../images/loading/loading.gif); background-repeat: no-repeat; background-position:top left; padding-left:20px; height:18px; text-align:left; } #loading{ position:absolute; left:45%; top:40%; border:3px solid #B2D0F7; background:white url(../images/loading/block-bg.gif) repeat-x; padding:10px; font:bold 14px verdana,tahoma,helvetica; color:#003366; width:180px; text-align:center; } </style> <div id="loading"> <div class="loading-indicator"> Page Loading... </div> </div> </head> <body onload="location.href = url;" style="overflow:hidden;overflow-y:hidden"> </body> <script> if(document.layers) { document.write('<Layer src="' + url + '" visibility="hide"></Layer>'); } else if(document.all || document.getElementById) { document.write('<iframe src="' + url + '" style="visibility:hidden;"></iframe>'); } else { location.href = url; } </script> </html>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kook_tian
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:35:0912楼 得分:0
    看样子你这应该是winform,既然你可以用循环控制你的查询,你就在循环中添加一个form.doevent()方法激活窗体就可以了,然后每次循环中显示你的进度。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Tll_W
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:35:3513楼 得分:0
    最好的办法是用threading写一个对话框,然后对话框中放置一个progressBar,对话框就用模式对话框显示,这样直到你的代码处理完时杀掉这个线程.如果还不明白可以联系我,我告诉你详细的做法.QQ:476492162
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • peterb
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:39:1714楼 得分:0
    使用一个进度条图片也行啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zlhxinxi83
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:55:3615楼 得分:0
    想做个大概的进度条 还是要看下你2个方法中的代码 才能更好的做出来  不然很难控制的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • czk0808
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 11:55:4716楼 得分:0
    查询的时候我没有用循环,是按顺序来的,只不过是判断,如果某一个不需要查询就跳过这个查询函数.

    因为没有用循环,所以我不好怎么控制进度条.

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinjazz
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 5

    发表于:2008-05-27 11:57:5117楼 得分:0
    引用 16 楼 czk0808 的回复:
    查询的时候我没有用循环,是按顺序来的,只不过是判断,如果某一个不需要查询就跳过这个查询函数.

    因为没有用循环,所以我不好怎么控制进度条.


    我已经给你参考链接了...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • czk0808
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 12:04:5118楼 得分:0
    好,我仔细去看看去,谢谢大哥了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hisense2423
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 12:18:3119楼 得分:0
    可以把费时的操作放在单独的线程里去执行,而不能在同一个主线程里执行,否则肯定会有停止的情况。

    或者可以在一个单独的县城里来刷新进度条。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xqy_2007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 12:24:0520楼 得分:0
    可以把那两个函数放在只做一次循环的for()结构中,再在for()设置进度条的相关参数.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Eleve
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 12:26:1721楼 得分:0
    路过学习:)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • virusplayer
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 12:46:4122楼 得分:0
    假的不好控制进度,你可以换一个思路,反正就是让客户知道还在插叙。不是死机了,你可以做一个循环播放的进度条啊,点击查询就开始循环播放,查询完毕,显示结果,就结束循环播放,让客户知道在动,就可以了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jjmm2035
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 13:17:1623楼 得分:0
    那个
    没必要作假得吧
    做成真的
    不好么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yuxuanji
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-27 15:03:2524楼 得分:0
    以前做过一个这样的计算水电煤气费的winform
    虽然很幼稚,不过用到自制ProgressBar+多线程

    给你看看源码吧

    C# code
    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using BylProgress; namespace _02Fee { public partial class Form1 : Form { public Form1() { InitializeComponent(); radioButton3.Checked = true; unitCount = 3; ReadBinaryFile(); bylProbar.Visible = false; } int c1; int p1=1; private int unitCount; private FileStream file; private Stream stream; private void ReadBinaryFile() { try { stream = new FileStream(@"c:\702fee.ini", FileMode.Open); IFormatter formatter = new BinaryFormatter(); txtLastAllCharge.Text = (string)formatter.Deserialize(stream); } catch (Exception e) { statusStrip1.Visible = true; statusStrip1.Text = e.Message; txtLastAllCharge.Text = "0"; } finally {if(stream!=null) stream.Close(); //stream.Dispose(); } } private