[英]Uploading files in .net with WebClient (and silverlight)
我有下面的代碼用來將文件上傳到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方法。
看看這個答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.