无法处理 StackOverflowException C#
Can't handle StackOverflowException C#
我不知道为什么我无法处理由该代码引起的异常:
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 (WhosebugException) { }
}
您无法处理堆栈溢出异常,因为为了记录有关异常的信息,代码必须做的事情之一是调用一些代码。
由于堆栈溢出,它绝对不能做的一件事就是调用更多代码。
因此 Windows 只是终止程序。
A WhosebugException
因此是无法捕获的,除非您在实际堆栈实际溢出之前明确地自己抛出它。
现在,这回答了你提出的问题。
这里真正的问题是显示的代码实际上并没有调用自身,但是方法的名称 _SelectedIndexChanged
意味着该代码中的某些内容使 checkedListBox1
再次调用此方法.
可能不应该。
您应该在此方法中放置一个断点并按几次 F5 并检查调用堆栈以查看其中的语句导致了这种情况的发生。
发生这种情况还有另一个原因,我可以用一整杯水来最好地描述它。如果你有一杯已经满了(但还没有溢出)的水,你在杯子里多加了一滴,然后它溢出了,是一滴水错了,还是其他十亿滴水都错了是之前放进玻璃杯里的吗?
可能是完全不同的原因导致堆栈溢出发生,恰好这种方法是溢出堆栈的最后一滴。
试试断点,看看你能走多远。
我不知道为什么我无法处理由该代码引起的异常:
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 (WhosebugException) { }
}
您无法处理堆栈溢出异常,因为为了记录有关异常的信息,代码必须做的事情之一是调用一些代码。
由于堆栈溢出,它绝对不能做的一件事就是调用更多代码。
因此 Windows 只是终止程序。
A WhosebugException
因此是无法捕获的,除非您在实际堆栈实际溢出之前明确地自己抛出它。
现在,这回答了你提出的问题。
这里真正的问题是显示的代码实际上并没有调用自身,但是方法的名称 _SelectedIndexChanged
意味着该代码中的某些内容使 checkedListBox1
再次调用此方法.
可能不应该。
您应该在此方法中放置一个断点并按几次 F5 并检查调用堆栈以查看其中的语句导致了这种情况的发生。
发生这种情况还有另一个原因,我可以用一整杯水来最好地描述它。如果你有一杯已经满了(但还没有溢出)的水,你在杯子里多加了一滴,然后它溢出了,是一滴水错了,还是其他十亿滴水都错了是之前放进玻璃杯里的吗?
可能是完全不同的原因导致堆栈溢出发生,恰好这种方法是溢出堆栈的最后一滴。
试试断点,看看你能走多远。