我们正在将XE项目迁移到XE5,但是,我们在测试期间遇到了关于teechart的访问冲突异常。
我创建了一个测试应用程序来重新创建问题。使用测试应用程序,打开第一个teechart表单时工作正常,但在第二次打开或打开新表单时会出现访问冲突异常。
请参阅以下QC(embarcadero)附带的测试应用程序。
http://qc.embarcadero.com/wc/qcmain.aspx?d=122729
使用DCU进行调试时。通知TDBChart的OnStateChange事件时发生了异常。
procedure TDataSet.DataEvent(Event: TDataEvent; Info: NativeInt);
begin
...
if NotifyDataSources then
begin
for I := 0 to FDataSources.Count - 1 do
FDataSources[I].DataEvent(Event, Info); // <<---- Access Violation
if FDesigner <> nil then FDesigner.DataEvent(Event, Info);
end;
end;
答案 0 :(得分:1)
正如David Berneda在Quality Central所说:
它与使用内部的TObjectList泛型集合有关 DBChart。代码已经改进,所以现在修复了错误(一个新的 代码负责正确销毁ObjectList项。)
作为解决方法,您可以在表单的OnClose事件中添加此代码:
type TChartAccess=class(TDBChart); procedure TOutcomesGraphFm.bbtnCloseClick(Sender: TObject); begin TChartAccess(dbcBar).RemovedDataSource(bsTestScores,bsTestScores.DataSource); Close; end;