我的应用程序使用BackgroundWorker
将文件上传到FTP服务器。
一切正常,但似乎OnProgressChanged
事件不能像它应该的那样工作。
我虽然在OnProgressChanged
事件被触发后RunWorkerCompleted
将完全完成,但事实并非如此。
在我的情况下,虽然OnProgressChanged
被解雇,但{{1}}事件仍在触发。显然,我的进度条仍在继续,而我的文件已经完全发送到ftp服务器。
我在调试模式下进行了测试,发现在RunWorkerComplete
被解雇后,RunWorkerCompleted
仍在使用。
我的代码在这里。
OnPorgressChanged
关于这个问题的任何想法? 谢谢你们
答案 0 :(得分:7)
这很可能是由原生进度条组件的Vista更新引入的工件引起的,也存在于Windows 7中。要查看它,请启动一个新的Winforms项目并在表单上放置一个进度条和一个按钮。双击该按钮,使Click事件处理程序如下所示:
private void button1_Click(object sender, EventArgs e) {
if (progressBar1.Value == progressBar1.Maximum) progressBar1.Value = progressBar1.Minimum;
else progressBar1.Value = progressBar1.Maximum;
}
按F5并单击按钮。请注意条形图动画,它从0平滑移动到100.大约需要一秒钟。
也许你现在看到了这个含义,这个动画产生了滞后。换句话说,可见值总是小于编程值,除非你给它足够的时间来赶上。你没有,你不断用ProgressChanged事件处理程序更新值。
不幸的是,他们忘了提供关闭此动画的选项。然而,有一个技巧,默认情况下,动画被禁用为减量。您可以做的是将Value属性设置两次,首先设置为值+ 1,然后设置为值。条形图立即跳转到编程值。唯一的缺陷就是你不能轻易跳到100%。