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

时间:2017-04-12 08:35:11

标签: c# wpf xaml winscp winscp-net

我创建了将文件从客户端传输到服务器的项目。我已完成文件传输并获得文件传输的详细信息,如文件名(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在窗口中绑定每个第二个文件传输的细节。因为我需要显示文件传输的进度。

3 个答案:

答案 0 :(得分:2)

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

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

当事件在后台线程上触发时,您需要使用Invoke

请参阅Updating GUI (WPF) using a different thread

答案 1 :(得分:2)

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

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

这是针对文件传输进度移动的进度条。我将以百分比完成显示进度后发布。

progressBar是wpf中的Xaml元素的名称。

答案 2 :(得分:1)

我找到了显示文件传输进度的代码百分比。请在下面找到wpf窗口的Xaml和c#代码。

使用wpf在窗口中显示百分比的Xaml。

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