c1 flexgrid 4.0J中的一个事件处理的bug
最近同事在使用vs2008开发某公司的勤务管理系统(winform)时遇到这样一个问题。
在flexgrid的AfterEdit事件处理中,如果发生了异常
则告知用户并关闭当前窗体,类似的操作如下代码:
private void c1FlexGrid1_AfterEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
try
{
//业务处理
}
catch (Exception ex)
{
// 告知用户
this.Close();
}
}
但是这个时候问题出现了,在正常的执行完了“this.Close();”之后,却在Main方法中的如下代码处出现了空指针异常。
Application.Run(new Form1());
因为用户的代码都是正常执行过的,通过查看异常堆栈发现异常是flexgrid中抛出来的,是在处理flexgrid的单元格的OnKeyDown事件(不是flexgrid的事件)
时,因为flexgrid的事件处理采取的是同步方式,
所以此时窗体被关闭了,flexgrid也就被释放掉了,所以抛出了空指针。这应该是一个flexgrid的bug.缺少必要的判断。
解决方法:另开一个线程来关闭窗体或者采用异步处理方式。使得在关闭窗体前flexgrid已经处理完相关的事件。