Sal*_*ami 0 .net c# stack-overflow exception-handling exception
我不知道为什么我无法处理由该代码引起的此异常:
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) { }
}
Run Code Online (Sandbox Code Playgroud)
您无法处理堆栈溢出异常,因为代码必须执行的操作之一是记录有关异常的信息,即调用某些代码.
由于你已经溢出了堆栈,它绝对不能做的事情之一就是调用更多的代码.
因此Windows为什么只是终止该程序.
StackOverflowException因此,A 是无法捕获的,除非您在实际堆栈实际溢出之前自己明确地抛出它.
现在,这回答了你问的问题.
这里真正的问题是,所示的代码实际上并不调用自身,但该方法的名称_SelectedIndexChanged意味着该代码中的某些内容会checkedListBox1再次调用此方法.
它可能不应该.
你应该在这个方法中放置一个断点并多次点击F5并检查调用堆栈,看看里面的哪个语句导致这种情况发生.
还有另外一个原因可能会发生这种情况,我可以通过提到一整杯水来最好地描述它.如果你有一杯已经装满的水(但还没有溢出),你又将一滴水倒入玻璃杯中,然后它会溢出,是一个单一的水滴出现故障,还是十亿个其他的水滴在它之前被放入玻璃杯?
可能会有一些完全不同的东西导致堆栈溢出发生,它恰好发生这种方法是溢出堆栈的最后一滴.
尝试断点,看看你有多远.
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |