2010-05-20 44 views
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的方法。

回答

0

看看this answer

+0

谢谢,但不幸的是Silverlight不支持全部的方法。 – Matt 2010-05-20 18:17:59

+0

那么你将不得不求助于HttpWebRequest/HttpWebResponse。 – 2010-05-20 18:20:35

+0

谢谢,会尝试。 – Matt 2010-05-20 18:36:44