如何使用WebClient()下载文件时避免应用程序崩溃;

时间:2010-10-12 21:49:32

标签: c# crash webclient

我正在使用C#WebClient();从服务器下载文件。问题是当我没有互联网或服务器没有响应时,我的应用程序崩溃尝试下载此文件。 什么是避免崩溃,中止并通知与服务器的连接失败的最佳做法?

3 个答案:

答案 0 :(得分:5)

只需处理WebClient.DownloadFile返回的异常:

try
{
    WebClient.DownloadFile(uri, myPath);
}
catch(WebException webEx)
{
     // There was an exception due to network or path problems...
     // Notify the user? 
}

答案 1 :(得分:2)

服务器没有响应是一种特殊情况,最好使用try / catch块进行适当的异常处理。

处理WebClient请求的例外情况是WebException。您可以检查异常对象以获取更多详细信息。 Status属性将包含status value,为您提供实际出错的更多信息。

检查samples in MSDN

try 
{
    WebClient client = new WebClient();

    byte[] pageData = client.DownloadData("http://www.contoso.com");
    string pageHtml = Encoding.ASCII.GetString(pageData);
    Console.WriteLine(pageHtml);

    client.DownloadFile("http://www.contoso.com", "page.htm");
}
catch (WebException webEx) 
{
    Console.WriteLine(webEx.ToString());
    if(webEx.Status == WebExceptionStatus.ConnectFailure) 
    {
        Console.WriteLine("Are you behind a firewall?  If so, go through the proxy server.");
    }
}

答案 2 :(得分:1)

如果它是交互式的,那么肯定是在捕获相关异常时最好的事情。无论您是中止所有内容还是发送消息(以及该消息是模态还是非模态消息)都将取决于您的整体UI。通常,在命令行或Web应用程序中对中止更为可接受(对每个应用程序都有适当的响应),仅使用错误消息中止该操作更适合GUI应用程序。

如果它是作为服务等运行的东西,你会想要记录异常并继续下一个操作,可能有一定程度的退避(连续两个例外,等待一点作为网络可能完全失败;另一个例外,这次等待更长时间。)

在任何一种情况下,您应该明确地捕获WebException s(以及可能IOException尝试保存文件失败)并让其他异常(更可能来自应用程序中的错误)被你的整体异常处理策略所吸引。