积极答复者
菜鸟求教一个关于进度条问题

问题
-
我用一个filesystemwatcher监控一个目录,当目录中少个文件,ProgressBar的进度条往前走一段,直到文件数量为0,进度条100。这时问题级出来了,我写的问题代码如下:
private void fsw_Delete(object sender, FileSystemEventArgs e) { int flsum = Directory.GetFiles(path.ToString()).Length; Thread pThread = new Thread(new ParameterizedThreadStart(SetProcess)); pThread.Start((object)flsum); } public void SetProcess(object fltemp) { int fls = Convert.ToInt32(fltemp); int fl = Directory.GetFiles(path1.ToString()).Length; int pro = (fls - fl) / fls * 100; this.SetProBar(pro);//设置进度条 }
因为每一次filesystemwatcher监控到目录变化后,传递flsum变化了,这时调用的进程中的fl也变化了,所以无论如何pro都是0,我该如何确保flsum不变而只是fl变化,这样进度条就能变化了。或者有什么别的方法?求高手帮忙解答。谢谢!
努力~
- 已编辑 zjyh16 2012年3月15日 8:05
答案
-
dear
form load仅会触发一次,所有的变数初始或变化应该是由filesystemwatcher决定
在每次filesystemwatcher侦测到一个事件后,process bar处理那个事完毕后,你必须要在把所有相关把数量旗标归0,以便下次的filesystemwatcher触发;假设你在砍挡时,有新的挡案加进来了,势必会影响你的旗标,这时你用int变数已经不符合你的需求,你要把挡案名称加到集合里,用集合处理。
秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
- 已标记为答案 Lie YouModerator 2012年3月27日 2:44
-
您好,原本想說只要在Changed事件中處理即可!
如果不行的話,那就依您上次所說的,在Delete & Create事件中處理!
感覺上只是要Check目前最大的檔案數,及目前的檔案數。
您想一下看看是否能動態改變Maximum及Value的值!
希望對您有所幫助!
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/- 已编辑 亂馬客 2012年3月21日 1:31
- 已建议为答案 Lie YouModerator 2012年3月22日 3:03
- 已标记为答案 Lie YouModerator 2012年3月27日 2:44
全部回复
-
您好,
谢谢您的回答!我该如何按照您说的“您可在一开始时,就先把该目录的档案数量先记录下来”这样做呢?我不可能在form_load之时或更前记录下来,因为途中可能文件的数量会变化。至于您说的“您这个处理逻辑不需要考虑该目录如果新增档案时”,我想在我这个程序中不需要考虑档案新增的情况,因为档案数量不为0时不会新增档案。所以我只需要做到每次有档案开始减少的时候,在减少前记录档案数量就行了,可是我该怎么做呢?
int flsum = Directory.GetFiles(path.ToString()).Length;
这里取到的数量已是被删除后的档案数量哦!所以您每次算出来都是0的原因!
您可在一开始时,就先把该目录的档案数量先记录下来,然后在Deleted事件中再取得已被删除後的数量!
不过,您这个处理逻辑不需要考虑该目录如果新增档案时,要如何处理吗?
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/努力~
-
您好,您說「我不可能在form_load之时或更前记录下来,因为途中可能文件的数量会变化。」,您一启动FileWatch时,就应先记录下来!
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/ -
您好,您說「我不可能在form_load之时或更前记录下来,因为途中可能文件的数量会变化。」,您一启动FileWatch时,就应先记录下来!
您一启动FileWatch时,就应先记录下来! 事实上,FileWatch在程序开启后就一直启动着。
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/努力~
-
您好,
不知我的理解有没有错,如果有错误的话,请您指正一下哦!
form_load时,先取得目录A的档案数,放到init_file_count变数之中,假设目前里面有10个档案,
设定progressBar最大值为10,之后fileWatch也启动!
再来如果目录A删除档案的话,在fsw_Delete Method中取得到数量就是9个,放到fls变数之中,再设定progressBar的值为9,之后如果又有删除档案的话,progressBar就会变成8,一直到数量为0。以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/ -
您好,
以上说的没错,您说的form_load只能执行一次这样的事情,可是form_load之后就不再有form_load事件了。执行完第一次后然后又有档案进入目录,这时怎么取得这个档案数init_file_count和变数fls呢?或者是不是可以在fsw_Create事件把第一个init_file_count档案数传递给fsw_Delete事件,然后再Delete事件中获得变数fls,从而设定进度条呢?
不知我的理解有没有错,如果有错误的话,请您指正一下哦!
form_load时,先取得目录A的档案数,放到init_file_count变数之中,假设目前里面有10个档案,
设定progressBar最大值为10,之后fileWatch也启动!
再来如果目录A删除档案的话,在fsw_Delete Method中取得到数量就是9个,放到fls变数之中,再设定progressBar的值为9,之后如果又有删除档案的话,progressBar就会变成8,一直到数量为0。
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/努力~
-
您好,
小弟有个想法,请您参考是否符合您的需求!
form_load时,记录目录A的档案数progressBar.Maximum
再來在FileSystemWatcher的Changed事件取得档案数,如果档案数比progressBar.Maximum大的话,就将该值设定给progressBar.Maximum,比progressBar.Maximum小,就设定progressBar.Value。一切都在Changed事件處理。
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/ -
dear
form load仅会触发一次,所有的变数初始或变化应该是由filesystemwatcher决定
在每次filesystemwatcher侦测到一个事件后,process bar处理那个事完毕后,你必须要在把所有相关把数量旗标归0,以便下次的filesystemwatcher触发;假设你在砍挡时,有新的挡案加进来了,势必会影响你的旗标,这时你用int变数已经不符合你的需求,你要把挡案名称加到集合里,用集合处理。
秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
- 已标记为答案 Lie YouModerator 2012年3月27日 2:44
-
您好,
小弟有个想法,请您参考是否符合您的需求!
form_load时,记录目录A的档案数progressBar.Maximum
再來在FileSystemWatcher的Changed事件取得档案数,如果档案数比progressBar.Maximum大的话,就将该值设定给progressBar.Maximum,比progressBar.Maximum小,就设定progressBar.Value。一切都在Changed事件處理。
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/努力~
-
dear
form load仅会触发一次,所有的变数初始或变化应该是由filesystemwatcher决定
在每次filesystemwatcher侦测到一个事件后,process bar处理那个事完毕后,你必须要在把所有相关把数量旗标归0,以便下次的filesystemwatcher触发;假设你在砍挡时,有新的挡案加进来了,势必会影响你的旗标,这时你用int变数已经不符合你的需求,你要把挡案名称加到集合里,用集合处理。
秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
努力~
-
您好,原本想說只要在Changed事件中處理即可!
如果不行的話,那就依您上次所說的,在Delete & Create事件中處理!
感覺上只是要Check目前最大的檔案數,及目前的檔案數。
您想一下看看是否能動態改變Maximum及Value的值!
希望對您有所幫助!
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/- 已编辑 亂馬客 2012年3月21日 1:31
- 已建议为答案 Lie YouModerator 2012年3月22日 3:03
- 已标记为答案 Lie YouModerator 2012年3月27日 2:44