VS C#2005使用異步編程捕捉異議
我正在使用下面的代碼上傳文件異步使用Web客戶端。但是,如果出現問題,我不確定是否可以發現異常情況。因爲wc.UpLoadFileAsync
會立即返回。所以把try...catch
放在那裏似乎毫無意義。
因此,爲了測試,我特意創建了一個錯誤,以查看如果我輸入錯誤的URL會發生什麼情況。但是,我在我的調試輸出窗口中得到了這個。
A first chance exception of type 'System.Net.WebException' occurred in System.dll
File completed
所以它不會在try...catch
發生火災。它仍是起火的UploadFileCompleted
方法
private void upload_config_to_server()
{
Uri url = new Uri("http://10.10.10.3/softphone/config.xml");
WebClient wc = new WebClient();
if (!wc.IsBusy)
{
wc.UploadProgressChanged += new UploadProgressChangedEventHandler(wc_UploadProgressChanged);
wc.UploadFileCompleted += new UploadFileCompletedEventHandler(wc_UploadFileCompleted);
try
{
wc.UploadFileAsync(url, "PUT", "config.xml");
}
catch (WebException webex)
{
Console.WriteLine("Web Exception {0}", webex.Message);
}
catch (Exception ex)
{
Console.WriteLine("Exception {0}", ex.Message);
}
}
}
private void wc_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
Console.WriteLine("Bytes uploaded {0}", e.BytesSent);
}
private void wc_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)
{
Console.WriteLine("File completed");
}
是否有處理這個正確的方式。我只想向用戶顯示一個消息框,以顯示上傳文件失敗的原因。但是,由於上傳的文件可能很大,上傳它可能需要幾秒鐘。所以我需要有Async來防止UI凍結。
非常感謝任何建議,
這看起來不像'分離事件處理程序'。 – 2011-03-02 07:47:42
@Hans:不,完全相反! :o)感謝您發現錯字,並予以更正。 – 2011-03-02 08:21:48