Показать диалоговое окно/форму файлов Копирования при ручном копировании файлов в C#?

Я вручную копирую некоторые папки и файлы через C#, и я хочу показать пользователю, что что-то на самом деле продолжается. В настоящее время программа смотрит, как будто его замороженный, но она на самом деле копирует файлы.

Я думал бы, что уже существует встроенное диалоговое окно, или сформируйтесь, который показывает процесс, подобный копированию/перемещению файлов в Windows Explorer. Есть ли что-нибудь как этот доступный, или я должен буду создать все с нуля?

Кроме того, это было бы лучшим методом, чтобы показать пользователю, что что-то активно продолжается?

Спасибо за справку!

10
задан Pudpuduk 14 June 2010 в 21:51
поделиться

3 ответа

Имеется один встроенный из пространства имен Microsoft.VisualBasic.FileIO . Не позволяйте имени пугать вас, это очень недооцененное пространство имен для C #. Статический класс FileSystem имеет методы CopyFile и CopyDirectory , которые имеют такую ​​возможность.

Члены файловой системы

Обратите особое внимание на параметр UIO в методах CopyFile и CopyDirectory . Это имитирует отображает окно копирования Windows Explorer.

FileSystem.CopyFile(sourceFile, destinationFile, UIOption.AllDialogs);
FileSystem.CopyDirectory(sourceDirectory, destinationDirectory, UIOption.AllDialogs);
24
ответ дан 3 December 2019 в 16:51
поделиться

Если вы используете поток BackgroundWorker, вы можете показать диалог прогресса. Вам потребуется использовать поток, если вы не хотите блокировать пользовательский интерфейс.

Пример на этой странице MSDN показывает, как обновить индикатор выполнения. В данном случае он находится на главной форме приложения, но вы можете создать для этого свой собственный диалог.

0
ответ дан 3 December 2019 в 16:51
поделиться

Это зависит от того, какой пользовательский опыт вы хотите обеспечить. Вы можете использовать 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();

Это позволит вам использовать существующую логику копирования файлов и при этом обеспечить хороший отзывчивый пользовательский интерфейс.

0
ответ дан 3 December 2019 в 16:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: