我遇到AsyncCallback
函數的問題。我正在使用一個下載數據,然後在我做之後,它會拋出一個不同的異常。有些代碼:AsyncCallback之後的異常
private void downloadBtn_Click(object sender, RoutedEventArgs e)
{
string fileName = System.IO.Path.GetFileName(Globals.CURRENT_PODCAST.Title.Replace(" ", string.Empty));
MessageBox.Show("Download is starting");
file = IsolatedStorageFile.GetUserStoreForApplication();
streamToWriteTo = new IsolatedStorageFileStream(fileName, FileMode.Create, file);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(Globals.CURRENT_PODCAST.Uri));
request.AllowReadStreamBuffering = false;
request.BeginGetResponse(new AsyncCallback(GetData), request);
}
private void GetData(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
Stream str = response.GetResponseStream();
byte[] data = new byte[16* 1024];
long totalValue = response.ContentLength;
while (str.Read(data, 0, data.Length) > 0)
{
if (streamToWriteTo.CanWrite)
streamToWriteTo.Write(data, 0, data.Length);
else
MessageBox.Show("Could not write to stream");
}
streamToWriteTo.Close();
MessageBox.Show("Download Finished");
}
有沒有辦法告訴當一個異步回調完成,再沒有崩潰運行代碼,或什麼我做錯了什麼?
你肯定在那裏做錯了什麼。您的讀/寫循環可能會寫入太多的數據。例如,您的循環總是以16千字節的塊寫入。所以即使你只下載23個字節,也會寫滿16KB。此外,您永遠不會關閉響應或響應流。這幾乎肯定會導致問題。如果您需要更具體的建議,您需要告訴我們您得到的例外情況。 –
我結束得到的迴應,如果這是你的意思?:HttpWebResponse響應=(HttpWebResponse)request.EndGetResponse(result); – AllFallD0wn
看看'HttpWebResponse.Close'和'Stream.Close'。 –