Can';t句柄堆栈溢出异常C#

Can';t句柄堆栈溢出异常C#,c#,.net,exception,exception-handling,stack-overflow,C#,.net,Exception,Exception Handling,Stack Overflow,我不知道为什么我不能处理由该代码引起的异常: private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) { try { for (int i = 0; i < checkedListBox1.Items.Count; i++) { int id = int.P

我不知道为什么我不能处理由该代码引起的异常:

    private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                    int id = int.Parse(((DataRowView)checkedListBox1.Items[i])[0].ToString());
                    bool check = checkedListBox1.GetItemChecked(i);
                    DataRow[] dr = dt.Select("id = " + id.ToString());
                    dr[0][2] = check;
            }
        }
        catch (StackOverflowException) { }
    }
private void checkedListBox1\u SelectedIndexChanged(对象发送方,事件参数e)
{
尝试
{
对于(int i=0;i

您无法处理堆栈溢出异常,因为为了记录异常信息,代码必须做的一件事就是调用一些代码

由于堆栈溢出,它绝对不能做的事情之一就是调用更多代码

因此,为什么Windows只是终止程序


因此,
StackOverflowException
是不可修补的,除非在实际堆栈实际溢出之前您自己显式地抛出它

现在,这回答了你提出的问题

这里真正的问题是,所示的代码实际上并不调用自身,但方法的名称
\u SelectedIndexChanged
意味着该代码中的某些内容使
checkedListBox1
再次调用此方法

也许不应该

您应该在这个方法中放置一个断点,并点击F5几次,然后检查调用堆栈,看看是哪个语句导致了这种情况的发生

这可能还有另一个原因,我可以用一杯水来描述它。如果你有一杯水已经满了(但还没有溢出来),你往杯子里多放了一滴水,然后水就溢出来了,是一滴错了,还是之前放进杯子里的其他十亿滴错了

可能有完全不同的原因导致堆栈溢出,碰巧这个方法是溢出堆栈的最后一滴


尝试断点,看看你能走多远。

你不能处理堆栈溢出异常,因为代码为了记录异常信息必须做的一件事就是调用一些代码

由于堆栈溢出,它绝对不能做的事情之一就是调用更多代码

因此,为什么Windows只是终止程序


因此,
StackOverflowException
是不可修补的,除非在实际堆栈实际溢出之前您自己显式地抛出它

现在,这回答了你提出的问题

这里真正的问题是,所示的代码实际上并不调用自身,但方法的名称
\u SelectedIndexChanged
意味着该代码中的某些内容使
checkedListBox1
再次调用此方法

也许不应该

您应该在这个方法中放置一个断点,并点击F5几次,然后检查调用堆栈,看看是哪个语句导致了这种情况的发生

这可能还有另一个原因,我可以用一杯水来描述它。如果你有一杯水已经满了(但还没有溢出来),你往杯子里多放了一滴水,然后水就溢出来了,是一滴错了,还是之前放进杯子里的其他十亿滴错了

可能有完全不同的原因导致堆栈溢出,碰巧这个方法是溢出堆栈的最后一滴


尝试断点,看看你能走多远。

StackOverflowException
是你无法捕获的异常之一。
StackOverflowException
是你无法捕获的异常之一。