文件传输详细信息持续绑定,直到使用 WPF 在 window 中传输文件

File transfer details binding continuously until file transfered in window using 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;

我需要在window中绑定这个转移的细节。我在传输文件时完成了绑定。但我需要如何使用 WPF 在 window 中绑定每秒传输的文件详细信息。因为我需要显示文件传输进度。

WinSCP .NET 程序集 Session.FileTransferProgress 事件连续触发。

所以您需要做的就是更新事件处理程序中的控件。

由于事件是在后台线程上触发的,因此您需要使用Invoke. See Updating GUI (WPF) using a different thread

有关 WinForms 代码示例,请参阅 WinSCP 文章 Displaying FTP/SFTP transfer progress on WinForms ProgressBar。使用 WPF,代码将非常相似。

我在@Martin Prikryl 的帮助下找到了解决方案。请在下面找到代码

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

这是为了让进度条随着文件传输进度移动。我会post完成后以百分比显示进度。

progressBar 是 wpf 中 Xaml 元素的名称。

我找到了用百分比显示文件传输进度的代码。请在下面找到 Xaml 和 wpf window.

的 c# 代码

Xaml 使用 wpf 在 window 中显示百分比。

<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() + "%");
}));