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已经处理完相关的事件。

posted @ 2010-03-25 16:46  刘鸿海  阅读(582)  评论(2编辑  收藏  举报