4

我正在运行一个 Windows 窗体程序,它在另一个线程上完成所有工作。一段时间后,UI 冻结并停止响应。后台线程仍然工作正常(我可以从完成的工作中看到)。

我得到了这个例外:

exe 中“System.IndexOutOfRangeException”类型的第一次机会异常

当我跟踪异常行并再次运行它时,我得到了这个:

线程<No Name>(0x19b4) 以代码 0 (0x0) 退出。

这行代码运行良好,但它给出了一个System.IndexOutofRangeException.

MatchCollection tempcollection = Regex.Matches(document,
        "(?<data>More information from(.|\\r|\\n)*?</div>)");
if (tempcollection.Count == 0)
{
    return Result;
}
string ThisDiv = tempcollection[0].Groups["data"].Value;
// The above line shows exception in Output Window,
// otherwise it works fine and moves to next line.

更新:我已经看到输出提供了有关每个异常的信息,无论它是否被捕获,我认为这是冻结 UI 的原因,但事实并非如此。

  1. 请帮助我摆脱这个例外。
  2. 是未经检查的异常吗?我在研究中了解到 .Net 没有未经检查的异常。请澄清这一点以供我理解。
4

1 回答 1

2

正则表达式可能没有返回组值,并且 tempcollection[0].Groups["data"] 可能没有设置,因此组上的索引器将失败,您可能会得到一个超出范围异常的索引尝试添加一个空检查相同在尝试从中获取价值之前。

尝试验证输入数据上的正则表达式,以验证上述在任何正则表达式工具上是否正确。

于 2015-03-27T06:15:01.613 回答