BackgroundWorker有DoWork事件,可以开始执行后台异步操作
ProgressChanged可以报告进度,但是需要调用ReportProgress方法才会报告一次,如何一直报告
简单点说,后台子进行在执行之中,主线程中需要知道此进程执行的进度,如何做?可否给出示例代码?感谢
9 个解决方案
#1
只有子线程自己知道自己干的活到了什么进度,因此才需要它去通知主线程进度。而何时通知进度也只有编码的人才知道,别人怎么知道你想在什么时候通知主线程呢?
比如读1000个文件,有人像每读完10个文件就通知一次,每次进度就前进1%;而有的人想每度完5个文件就通知一次,每次进度前进0.5%。完全取决于你个人。
比如读1000个文件,有人像每读完10个文件就通知一次,每次进度就前进1%;而有的人想每度完5个文件就通知一次,每次进度前进0.5%。完全取决于你个人。
#2
一直调用ReportProgress方法即可
#3
是这样的。
工作过程报告自己的“进度改变了”,那么监听事件的过程或者理睬它(显示或者记录下来),或者不理睬。总之是推送进度的,而不是什么读取进度的!
你要把这个逻辑想在头脑里,学到位。
#4
主线程监听了进度报告,把每一次的报告结果记录下来,这就是它“知道了”进程执行进度。
不能理解事件监听的人,只知道“想当然地监控结果”的人,在软件设计基本技术上,学到头顶多也就是刚学了一半。你要全盘接受事件的设计思路。
#5
一直报什么意思,程序是可控的,显示的粒度自己设定
#6
子线程ReportProgress需要参数,该参数是后台进度百分比,问题是这个值是不知道的。我就是想要得到这个进度值,子线程在执行一个操作时,时间不确定,我希望用户在主线程中能看到当前子线程执行的进度到哪里了。
上面举的例子,比如上传1000个文件,自己定粒度,传了10个报告一次,这样当然知道报告100次就可以了。问题是我这个子线程就1个操作,这个操作时间不确定,我就是想知道这个操作当前进度到哪里了。
或者这样说,我做一个压缩文件的程序,在压缩文件的时候,想随时能看到当前压缩的进度到多少了,不需要剩余时间,只要能模拟显示比如当前操作完成30%,40%,60%这样的
上面举的例子,比如上传1000个文件,自己定粒度,传了10个报告一次,这样当然知道报告100次就可以了。问题是我这个子线程就1个操作,这个操作时间不确定,我就是想知道这个操作当前进度到哪里了。
或者这样说,我做一个压缩文件的程序,在压缩文件的时候,想随时能看到当前压缩的进度到多少了,不需要剩余时间,只要能模拟显示比如当前操作完成30%,40%,60%这样的
#7
朋友,感谢你的回答,也许是我没表达清楚。不过也希望你能多看一看提问者的问题,不要老觉得问问题的就是有多差,有时候一个没怎么接触过的问题一时搞不明白也是有的。大家互相交流一下我觉得没什么不妥,即使问题再简单,又如何呢?谁没有一些在别人看起来很简单的问题。
#8
但是需要调用ReportProgress方法才会报告一次,如何一直报告
一直调用ReportProgress方法即可
对,根据自己要报告的粒度,调用reportProgress方法
#9
但是需要调用ReportProgress方法才会报告一次,如何一直报告
一直调用ReportProgress方法即可
对,根据自己要报告的粒度,调用reportProgress方法
你设置好粒度,然后使用ProgressChanged()方法就会report进度给你了。
http://blog.csdn.net/weixin_39730950/article/details/79417195
#1
只有子线程自己知道自己干的活到了什么进度,因此才需要它去通知主线程进度。而何时通知进度也只有编码的人才知道,别人怎么知道你想在什么时候通知主线程呢?
比如读1000个文件,有人像每读完10个文件就通知一次,每次进度就前进1%;而有的人想每度完5个文件就通知一次,每次进度前进0.5%。完全取决于你个人。
比如读1000个文件,有人像每读完10个文件就通知一次,每次进度就前进1%;而有的人想每度完5个文件就通知一次,每次进度前进0.5%。完全取决于你个人。
#2
但是需要调用ReportProgress方法才会报告一次,如何一直报告
一直调用ReportProgress方法即可
#3
只有子线程自己知道自己干的活到了什么进度,因此才需要它去通知主线程进度。而何时通知进度也只有编码的人才知道,别人怎么知道你想在什么时候通知主线程呢?
是这样的。
工作过程报告自己的“进度改变了”,那么监听事件的过程或者理睬它(显示或者记录下来),或者不理睬。总之是推送进度的,而不是什么读取进度的!
你要把这个逻辑想在头脑里,学到位。
#4
简单点说,后台子进行在执行之中,主线程中需要知道此进程执行的进度,如何做?
主线程监听了进度报告,把每一次的报告结果记录下来,这就是它“知道了”进程执行进度。
不能理解事件监听的人,只知道“想当然地监控结果”的人,在软件设计基本技术上,学到头顶多也就是刚学了一半。你要全盘接受事件的设计思路。
#5
一直报什么意思,程序是可控的,显示的粒度自己设定
#6
子线程ReportProgress需要参数,该参数是后台进度百分比,问题是这个值是不知道的。我就是想要得到这个进度值,子线程在执行一个操作时,时间不确定,我希望用户在主线程中能看到当前子线程执行的进度到哪里了。
上面举的例子,比如上传1000个文件,自己定粒度,传了10个报告一次,这样当然知道报告100次就可以了。问题是我这个子线程就1个操作,这个操作时间不确定,我就是想知道这个操作当前进度到哪里了。
或者这样说,我做一个压缩文件的程序,在压缩文件的时候,想随时能看到当前压缩的进度到多少了,不需要剩余时间,只要能模拟显示比如当前操作完成30%,40%,60%这样的
上面举的例子,比如上传1000个文件,自己定粒度,传了10个报告一次,这样当然知道报告100次就可以了。问题是我这个子线程就1个操作,这个操作时间不确定,我就是想知道这个操作当前进度到哪里了。
或者这样说,我做一个压缩文件的程序,在压缩文件的时候,想随时能看到当前压缩的进度到多少了,不需要剩余时间,只要能模拟显示比如当前操作完成30%,40%,60%这样的
#7
简单点说,后台子进行在执行之中,主线程中需要知道此进程执行的进度,如何做?
主线程监听了进度报告,把每一次的报告结果记录下来,这就是它“知道了”进程执行进度。
不能理解事件监听的人,只知道“想当然地监控结果”的人,在软件设计基本技术上,学到头顶多也就是刚学了一半。你要全盘接受事件的设计思路。
朋友,感谢你的回答,也许是我没表达清楚。不过也希望你能多看一看提问者的问题,不要老觉得问问题的就是有多差,有时候一个没怎么接触过的问题一时搞不明白也是有的。大家互相交流一下我觉得没什么不妥,即使问题再简单,又如何呢?谁没有一些在别人看起来很简单的问题。
#8
但是需要调用ReportProgress方法才会报告一次,如何一直报告
一直调用ReportProgress方法即可
对,根据自己要报告的粒度,调用reportProgress方法
#9
但是需要调用ReportProgress方法才会报告一次,如何一直报告
一直调用ReportProgress方法即可
对,根据自己要报告的粒度,调用reportProgress方法
你设置好粒度,然后使用ProgressChanged()方法就会report进度给你了。
http://blog.csdn.net/weixin_39730950/article/details/79417195