Сведения о передаче файлов привязываются непрерывно до тех пор, пока файл не будет передан в окне с использованием WPF

Я создал проект для передачи файла с клиента на сервер. Я выполнил передачу файла и получил данные о передаче файла, такие как имя файла (something.avi) и процент (10%) переданного файла, как показано ниже. Всякий раз, когда я передаю файл, я использую обработчик событий ниже, чтобы узнать файл переданные реквизиты.

private static void SessionFileTransferProgress(object sender, FileTransferProgressEventArgs e)
{
    // New line for every new file
    if ((_lastFileName != null) && (_lastFileName != e.FileName))
    {
        Console.WriteLine();
    }

    // Print transfer progress
    Console.Write("\r{0} ({1:P0})", e.FileName, e.FileProgress);

    // Remember a name of the last file reported
    _lastFileName = e.FileName;
}
private static string _lastFileName;

Мне нужно связать эти переданные детали в окне. Я сделал привязку во время передачи файла. Но мне нужно, как связать каждый второй файл, переданный в окне, с помощью WPF. Потому что мне нужно показать ход передачи файлов.


person arun d    schedule 12.04.2017    source источник


Ответы (3)


Событие сборки WinSCP .NET Session.FileTransferProgress запускается постоянно.

Итак, все, что вам нужно сделать, это обновить элемент управления в обработчике событий.

Поскольку событие запускается в фоновом потоке, вам необходимо использовать Invoke. См. раздел Обновление графического интерфейса (WPF) с использованием другого потока.

Пример кода WinForms см. в статье WinSCP Отображение хода передачи FTP/SFTP на WinForms ProgressBar. С WPF код будет очень похож.

person Martin Prikryl    schedule 12.04.2017
comment
Спасибо за ваше предложение..хорошее..Сработало для меня..@Martin Prikryl - person arun d; 13.04.2017

Я нашел решение с помощью @Martin Prikryl. Пожалуйста, найдите код ниже

progressBar.Dispatcher.Invoke(() => progressBar.Value = (int)(e.FileProgress * 100), DispatcherPriority.Background);

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

progressBar — это имя элемента Xaml в wpf.

person arun d    schedule 13.04.2017

Я нашел код для отображения прогресса передачи файлов в процентах. Ниже приведен код Xaml и C# для окна wpf.

Xaml для отображения процентов в окне с помощью wpf.

<TextBlock x:Name="percentage" Text=""  Height="27" Width="50" FontSize="20"/>

Код C# для привязки прогресса передачи файлов в процентах.

this.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate()
{
   this.percentage.Text = ((e.FileProgress * 100).ToString() + "%");
}));
person arun d    schedule 13.04.2017
comment
Пожалуйста, отредактируйте свой другой вопрос, чтобы добавить эту информацию. Это сайт вопросов и ответов, а не дискуссионный форум. - person Martin Prikryl; 13.04.2017