这就是我需要的东西(这有点难以解释):
我有2个窗口控件: MainWindow和FileMover 和1个util类: FileMonitor
MainWindow创建了一个FileMonitor的新对象,用于测试它的Loaded事件,该事件创建了一个FileSystemWatcher和一个Timer对象。 FileSystemWatcher监视给定文件夹中的Created和Changed事件,并将Timer添加为某种事件缓冲区(例如,将文件夹或大文件复制到正在监视的文件夹时,会生成多个事件。我只想对第一个事件,而不是其余的事件。这意味着,直到计时器停止并生成其Elapsed事件才会创建FileMover窗口。该窗口有一些基本的文件/文件夹复制/移动逻辑和一个ProgressBar控件,用于显示当前状态。
我的问题是: ProgressBar控件在文件处理期间不会更新。仅当复制/移动方法返回时,才会更新进度条。 我已经尝试过使用FileMover的调度程序和ProgressBar调度程序,但这些都不起作用。
我上面的内容很不清楚,请告诉我! 这是我的来源:
(由于网站限制,不得不将两个源文件都放在一个粘贴中。)
答案 0 :(得分:1)
您必须在另一个线程中加载该文件。如果没有,UI将不会刷新。一个简单的方法是BackgroundWorker - 类。这是一个简短的例子:
BackgroundWorker bgWorker = new BackgroundWorker() { WorkerReportsProgress=true};
bgWorker.DoWork += (s, e) => {
// Load here your file/s
// Use bgWorker.ReportProgress(); to report the current progress
};
bgWorker.ProgressChanged+=(s,e)=>{
// Here you will be informed about progress
// (if bgWorker.ReportProgress() was called in DoWork)
};
bgWorker.RunWorkerCompleted += (s, e) => {
// Here you will be informed if the job is done
};
bgWorker.RunWorkerAsync();