使用WebClient(和silverlight)上传.net中的文件

时间:2010-05-20 17:54:03

标签: c# silverlight file-upload webclient

我有以下代码用于将文件上传到我的ashx页面。它运作得很好,虽然我似乎无法找到一种合适的方式来获得它转移了多少。

主叫代码:

WebClient wc = new WebClient();
wc.OpenWriteCompleted += (s2, e2) =>
{
   PushData(e2.Result, offset);
   e2.Result.Close();
};
wc.OpenWriteAsync(ub.Uri);

推送数据代码:

private void PushData(Stream output, long offset)
{
    byte[] buffer = new byte[4096];
    int bytesRead;
    bytesRead = theFileStream.Read(buffer, 0, buffer.Length);
    if (bytesRead != 0)
    {
        output.Write(buffer, 0, bytesRead);

        totalBytesDone += bytesRead;
        FireUpdateEvent(bytesRead);
    }
}

为简洁起见,上面的代码与我的实际代码略有不同。 现在,我已经假定当它到达output.Write(buffer,0,bytesRead);时,它就是发送实际数据的点,并且它会锁定并且只有在完成写入该部分后才转到下一行。但它在向服务器写入任何内容之前会继续totalBytesDone += bytesRead;。我认为原因是它在后台的一个单独的线程中进行编写(或者我实际上是在查看代码的错误部分并在其他地方写入) - 但是我的totalBytesDone代码可以工作我< strong>想要它锁定直到它完成发送(我可以把它全部放在一个单独的线程中)。

我已经下载了大量用于执行此操作的示例,他们要么无法正常使用我的ashx文件处理程序(我无法更改),要么使用仅报告50%进度的WebClient方法。

1 个答案:

答案 0 :(得分:0)

看看this answer

相关问题