0
我有低于我使用的文件上传到我的ashx页面的代码。它工作得很好,虽然我似乎找不到一个合适的方式来获取它已转移。上传文件与Web客户端(和Silverlight)
调用代码:
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的方法。
谢谢,但不幸的是Silverlight不支持全部的方法。 – Matt 2010-05-20 18:17:59
那么你将不得不求助于HttpWebRequest/HttpWebResponse。 – 2010-05-20 18:20:35
谢谢,会尝试。 – Matt 2010-05-20 18:36:44