簡體   English   中英

使用WebClient(和silverlight)在.net中上傳文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM