在C#中手动复制文件时显示复制文件对话框/表单?

我通过C#手动复制一些文件夹和文件,我想向用户显示实际发生的事情。 目前,该程序看起来好像已冻结,但它实际上是在复制文件。

我认为已经有一个显示该过程的内置对话框或表单,类似于在Windows资源管理器中复制/移动文件。 有什么可用的,或者我必须从头开始创建一切?

此外,这是向用户显示某些内容正在积极进行的最佳方法吗?

谢谢您的帮助!

Microsoft.VisualBasic.FileIO命名空间内置了一个。 不要让这个名字欺骗你,它是一个非常被低估的C#命名空间。 静态类FileSystem具有具有该function的CopyFileCopyDirectory方法。

文件系统成员

密切关注CopyFileCopyDirectory方法中的UIOption 。 此模拟显示Windows资源管理器复制窗口。

 FileSystem.CopyFile(sourceFile, destinationFile, UIOption.AllDialogs); FileSystem.CopyDirectory(sourceDirectory, destinationDirectory, UIOption.AllDialogs); 

如果使用BackgroundWorker线程,则可以显示进度对话框。 如果您不想锁定UI,则需要使用线程。

此MSDN页面上的示例显示了如何更新进度指示器。 在这种情况下,它位于主应用程序表单上,但您可以为此创建自己的对话框。

这取决于您想要提供的用户体验。 您可以使用Windows API显示标准副本对话框; 但是,我相信你的申请仍然没有反应。

我推荐这样的东西:

 // WPF System.Threading.Thread t = new System.Threading.Thread(() => { foreach(String file in filesToCopy) { // copy file here // WPF UI Update Dispatcher.BeginInvoke(() => { // progressBar Update }); } }); // WinForms System.Threading.Thread t = new System.Threading.Thread(() => { foreach(String file in filesToCopy) { // copy file here // WinForms UI Update Form1.BeginInvoke(() => { // progressBar Update }); } }); // in either case call t.Start(); 

这允许您使用现有的文件复制逻辑,并仍然提供良好的响应式用户界面。