【问题标题】:Try/Catch doesn't catch exception c#Try/Catch 不会捕获异常 c#
【发布时间】:2016-08-31 18:09:09
【问题描述】:

我尝试在这段代码中捕获异常:

    public Source(String source) /// Constructor
    {
        _dialogs = new ThreadSafeList<Int64>();
        _source = source;
        try
        {
            var request = WebRequest.Create(_source);
            var stream = request.GetResponse().GetResponseStream();
            XmlDocument doc = new XmlDocument();
            doc.Load(stream);

            _oldNews = doc.SelectNodes("/rss/channel/item").Cast<XmlNode>();
            IsValid = true;
        }
        catch (Exception e)
        {
            Logger.Log("Source read error " + source + ", more: " + e.Message);
            IsValid = false;
        }
    }

XmlException 发生在 doc.Load(stream) 的 try 块中,但没有捕获。我发现存在一些无法以常规方式捕获的异常类型。 XmlException 不是这种类型的异常。无论如何,我尝试使用 [HandleProcessCorruptedStateExceptions] 属性,但这无济于事。我怎样才能捕捉到这个异常? Stack Trace。有什么建议我都会采纳的

【问题讨论】:

  • 您如何知道发生了 XMLException?
  • 您确定异常是从 try 内部引发的,而不是在其他位置吗?你能发布堆栈跟踪吗?
  • 我不能 100% 确定它是否重复(因为根本原因可能不同),但这个答案似乎非常有用:stackoverflow.com/a/1405510/328193
  • 他正在使用将doc.Load(stream) 放在块内,所以这似乎不是问题
  • 我没有给你答案,但catch (Exception e) 被认为是不好的做法。你应该缩小你的 catch 块的范围(在你弄清楚它为什么不适合你之后)。见stackoverflow.com/a/3866567/211627

标签: c# wpf exception


【解决方案1】:

C# 中的所有异常都是从 System.Exception 派生的。因此,使用您的 try and catch 代码不可能不捕获 XmlException。

假设: a) 您试图捕获的异常发生在其他地方,例如其他模块中的重复代码。

b) 如果您想明确地捕获 XMLException,下面的代码会有所帮助。

public static void Source(String source) /// Constructor
{
    try
    {
        var request = WebRequest.Create(source);
        var stream = request.GetResponse().GetResponseStream();         
        XmlDocument doc = new XmlDocument();
        doc.Load(stream);
    }
    catch(XmlException e) 
    {
       Console.WriteLine("XmlException Caught");
       Console.WriteLine(e.Message);
       Console.WriteLine("Exception object Line, pos: (" + e.LineNumber + "," + e.LinePosition  + ")");
    }       
    catch (Exception ex)
    {
        Console.WriteLine("Exception Caught");
        Console.WriteLine(ex.Message);
    }
}

【讨论】:

  • 你有错误的快照吗?或者任何让您确定异常正在发生的事情。我相信这会很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 2012-08-06
  • 2015-06-21
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
相关资源
最近更新 更多