VS C#2005
我使用下面的代码使用Web客户端上传文件Async.但是,如果出现问题,我不确定是否可以捕获异常.因为wc.UpLoadFileAsync会马上回来.所以放在try...catch那里似乎毫无意义.
所以为了测试,我故意创建了一个错误,看看如果我输入错误的URL会发生什么.但是,我在调试输出窗口中得到了这个.
A first chance exception of type 'System.Net.WebException' occurred in System.dll
File completed
Run Code Online (Sandbox Code Playgroud)
所以它不会发射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");
}
Run Code Online (Sandbox Code Playgroud)
有没有正确的方法来处理这个问题.我只想向用户显示一个消息框,以显示上传文件失败的原因.但是,由于上传的文件很大,上传文件可能需要几秒钟.所以我需要使用Async来防止UI冻结.
非常感谢任何建议,
您可以检查e.Error值.
private void wc_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)
{
if (e.Error != null)
{
if (e.Error is WebException)
Console.WriteLine("Web Exception {0}", ((WebException)e.Error).Message);
else
Console.WriteLine("Web Exception {0}", e.Error.Message);
}
else if (e.Cancelled)
Console.WriteLine("File cancelled");
else
Console.WriteLine("File completed");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1942 次 |
| 最近记录: |