在进度条上显示异步SSH.NET SFTP上传(BeginUploadFile)的进度

时间:2018-09-06 03:19:03

标签: c# .net progress-bar sftp ssh.net

我在C#中使用Renci SSH.NET作为SFTP客户端。
现在,我使用此API制作进度条。我尝试了异步并等待,但是找不到用于下载字节的解决方案。我尝试过这种方式:

  1. 您能告诉我我的代码有问题吗?

  2. 是否可以尝试使用Renci SSH.NET等待异步?并从API获取一些下载或上传的字节。

require()

1 个答案:

答案 0 :(得分:0)

首先,您的代码有很多缺陷:

  • 您正在使用“异步”方法,然后同步等待它完成。
  • 您甚至可以在循环中处理结果(大概是来自GUI线程),而无需抽出 GUI消息队列。
  • 创建自己的实例时,
  • UploadResult无法获得上传进度。将其传递给“状态”对象将无济于事。您应该将BeginUploadFile返回的SftpUploadAsyncResult强制转换为SftpUploadAsyncResult,而不是创建新的SftpClient

无论如何,由于我不认为uploadCallback类本身具有任何会在上传进度上触发的事件,所以最简单的解决方案是使用BeginUploadFile的{​​{1}}参数(第4个),与同步上传相同的方式。参见Displaying progress of file upload in a ProgressBar with SSH.NET

sftp.BeginUploadFile(
    stream, remotepath + "/" + Path.GetFileName(localpath), null, null, UpdateProgresBar);

然后使用“异步”上传是否对SftpClient有好处,这是令人怀疑的。 Connect方法没有“异步”变体,因此您仍然需要一个线程/任务,为什么不立即从该线程上载文件呢?