在C#中手动复制文件时显示复制文件对话框/表单?
我通过C#手动复制一些文件夹和文件,我想向用户显示实际发生的事情。 目前,该程序看起来好像已冻结,但它实际上是在复制文件。
我认为已经有一个显示该过程的内置对话框或表单,类似于在Windows资源管理器中复制/移动文件。 有什么可用的,或者我必须从头开始创建一切?
此外,这是向用户显示某些内容正在积极进行的最佳方法吗?
谢谢您的帮助!
Microsoft.VisualBasic.FileIO命名空间内置了一个。 不要让这个名字欺骗你,它是一个非常被低估的C#命名空间。 静态类FileSystem
具有具有该function的CopyFile
和CopyDirectory
方法。
文件系统成员
密切关注CopyFile
和CopyDirectory
方法中的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();
这允许您使用现有的文件复制逻辑,并仍然提供良好的响应式用户界面。