C# WCF 命名管道 - 将进度返回到 GUI

问题描述 投票:0回答:1

我使用 WCF 服务在本地环境中复制文件。 WPF GUI 用于使用一些按钮从 WCF 服务调用方法。 我使用的通信类型是命名管道。

我在“获取”复制文件并将其传递到 GUI 以填充进度条的任何进度时遇到问题。

当它是单向通信时,是否有机会使用命名管道来处理这个问题?

c# wcf named-pipes
1个回答
0
投票

首先,通过WCF复制文件并不难。

问题是获取百分比,我的方法可以在WCF控制台实时查看。

服务器:

服务1:

public void CopyFile(string source, string target, ref float percent, int bufferSize = 1024 * 1024 * 10)
{
    byte[] array = new byte[bufferSize]; 
    using (FileStream fsRead = File.Open(source, FileMode.Open, FileAccess.Read))
    {
        using (FileStream fsWrite = File.Open(target, FileMode.Create, FileAccess.Write))
        {
            while (fsRead.Position < fsRead.Length)
            {
               
                int length = fsRead.Read(array, 0, array.Length);
                
                fsWrite.Write(array, 0, length);
              
                percent = (float)fsRead.Position / fsRead.Length;
                Console.WriteLine(percent.ToString());
            }
        }
    }
    
}

I服务1:

 [OperationContract]
 void CopyFile(string source, string target, ref float percent, int bufferSize = 1024 * 1024 * 10);

客户:

Service1Client client=new Service1Client();
   float percent = 0;
    string source = @"xxxx";
    string target = @"xxxx";
    percent=client.CopyFile(source, target,ref percent,1024*1024*10);

我的建议是直接将此代码放入您的 WPF 项目中。这将允许您用显示数据替换 Console.Write 行。

© www.soinside.com 2019 - 2024. All rights reserved.