【问题标题】:Uploading files in .net with WebClient (and silverlight)使用 WebClient(和 silverlight)在 .net 中上传文件
【发布时间】:2011-02-22 00:26:30
【问题描述】:

我有下面的代码,用于将文件上传到我的 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 代码工作我 希望它在完成发送之前一直锁定(我可以稍后将这一切放在一个单独的线程中)。

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

【问题讨论】:

    标签: c# silverlight file-upload webclient


    【解决方案1】:

    看看this answer

    【讨论】:

    • 谢谢,但遗憾的是 Silverlight 不支持全部方法。
    • 那么你将不得不求助于 HttpWebRequest/HttpWebResponse。
    • 如何知道 SilverLight 版本的 c# 支持什么和不支持什么?
    • @Darin Dimitrov,这是什么反应?.. :|实际上,我正在阅读文档,目前看不到 SilveLight 实现中是否不支持任何内容。
    • @Matt,你说 SilveLight 不支持全范围的方法是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2021-09-30
    • 2014-03-31
    • 1970-01-01
    • 2012-06-18
    • 2017-12-28
    • 2021-01-19
    相关资源
    最近更新 更多