发现编辑器扩展的一个问题,不知该如何解决
在CnPack中,编辑器扩展专家在BDS2006下存在一个问题,就是当在IDE中编辑过代码之后,如果关闭所有项目,然后打开IDE的option,或者about窗口都会使得IDE所在的进程的cpu占用率非常高,系统变很慢。
经过从下载CnWizard最新的0.7.9.194源码,并调试分析后,发现问题出在Utils\CnEditControlWrapper.pas中,这里面的TCnEditControlWrapper包装了IDE本身的
EditControl。
而TCnEditControlWrapper.OnIdle()事件的处理代码中调用了GetEditorContext(),
如果GetEditorContext()当关闭所有编辑器之后被调用的话,就会抛出AccessViolation异常,
经过单步调试发现,实际上是这个时候EditView发生了变化,这个时候EditView.Buffer=nil,
所以访问EditView.Buffer.GetCurrentDate会抛出AccessViolation异常,
同时,访问EditView.Block似乎也会抛出AccessViolation异常。
由于OnIdle事件被不停的调用,并且OnIdle事件的代码中不断的调用GetEditorContext(),
所以导致不断的抛出异常,从而导致cpu占用率非常高,IDE反应非常慢。
所以,我想问题可能出在当IDE中所有的EditControl被关闭后(实际上应该是被隐藏了),
EditView不知道发生了什么变化,而TCnEditControlWrapper又没有及时收到更新通知,从而导致访问异常。
小弟水平太差,一直想不到有什么好方法能够解决这个问题,期待CnPack早日解决这个问题。大家也来一起想想办法吧,为CnPack进步贡献一把力。
|