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
是你无法捕获的异常之一。