2010-09-05 57 views
0

这里就是我需要(这是一个有点难以解释):更新的事​​件在第一窗口中创建的对象的第二窗口控制

我有2个窗口控件: 主窗口和FileMover可以 和1 UTIL类: FileMonitor

MainWindow为其测试目的创建FileMonitor的新对象,它是Loaded事件,它创建一个FileSystemWatcher和一个Timer对象。 FileSystemWatcher监视Created和Changed事件的给定文件夹,并将Timer添加为某种事件缓冲区(例如,将文件夹或大文件复制到正在监视的文件夹时,会生成多个事件,我只想执行第一个事件,而不是其余)。这意味着,直到计时器停止并产生其Elapsed事件时,才会创建FileMover窗口。此窗口具有一些基本的文件/文件夹复制/移动逻辑和ProgressBar控件以显示当前状态。

我的问题是这样的: ProgressBar控件在文件处理过程中不会更新。只有在复制/移动方法返回时,进度条才会更新。 我试过使用FileMover的调度程序和ProgressBar调度程序,但都没有工作。

我上面的内容很不明确,请告诉我! 这里是我的源:

来源: http://pastie.org/1139570

(不得不把两个源文件中,因为场地限制,1贴..)

回答

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(); 
+0

非常感谢 - 在我的挫折中,我忘记了所有关于锁定UI的方法-.- – 2010-09-06 06:29:50

相关问题