2010-09-27 99 views
0

http://msdn.microsoft.com/en-us/library/system.net.openwritecompletedeventargs.result(VS.95).aspxOpenWriteCompletedEventArgs.Result說明?

我正在使用WebClient類編寫.NET應用程序(Silverlight API)。我只是想在上傳文件異步後獲得服務器腳本的XML風格結果。我認爲OpenWriteCompletedEventArgs內部的結果流是我想看的,但是MSDN表示Result是:「獲取一個用於向服務器發送數據的可寫流。」..我真的不明白你怎麼能寫一次完成。我想知道我是否真的可以從中讀取,如果我不能,我如何在上傳後閱讀服務器消息?

static void UploadCompleted(object sender, OpenWriteCompletedEventArgs e) 
{ 
    /* e.Result says its only a writable stream */ 
} 

回答

0

不,你不讀這個。此事件的要點是讓您將HTTP 請求的正文寫入服務器。如果您不需要在請求中寫入任何數據,則不需要此事件。如果您需要編寫數據,則可以使用此事件,然後在後續事件觸發時讀取結果。

如果需要閱讀,要做到這一點,當事件已經完成 - 例如OpenReadCompleted

+0

OpenReadCompleted將由OpenWriteAsync調用嗎? – dtb 2010-09-27 18:52:27

+0

@dtb:說實話,我不清楚。該文檔說,當你關閉流時,線程將阻塞,直到結果準備就緒......但這聽起來有點奇怪。 – 2010-09-27 18:53:48

+0

我會進一步調查..不幸的是,我甚至在運行之前,有35,000條線中有大約5,000條線從Obj-C移植到.NET。我肯定會在這裏發佈我的發現 – Kyle 2010-09-27 19:00:53

0

文檔可能不明確,或者您沒有使用正確的方法。這裏有一個例子:

client.UploadFileAsync(new Uri("http://example.com"), @"c:\work\foo.txt"); 
client.UploadFileCompleted += (sender, e) => 
{ 
    // e.Result is a byte[] containing the server response 
    // which in your case is XML 
}; 
+0

不幸的是,這不是.NET api的當前Silverlight子集。希望它是!除非WebClient以外的其他地方? – Kyle 2010-09-27 18:58:32

0

時服務器的HTTP連接已經建立,而不是當上傳完成調用的OpenWriteCompleted事件。您寫入流以上傳數據並在完成後關閉流。

使用OpenWriteAsync時,似乎沒有辦法從服務器獲取響應。