Delphi 第二次打开teechart表单时发生访问冲突

Delphi 第二次打开teechart表单时发生访问冲突,delphi,delphi-xe5,teechart,Delphi,Delphi Xe5,Teechart,我们正在将我们的XE项目迁移到XE5,但是,在测试期间,我们遇到了关于teechart的访问冲突异常 我已经创建了一个测试应用程序来重新创建问题。对于测试应用程序,当打开第一个teechart表单时,它可以正常工作,但当第二次打开它或打开新表单时,它将获得访问冲突异常 请参考以下QC(embarcadero)随附的测试应用程序 当使用DCU调试它时。通知TDBChart的OnStateChange事件时发生异常 procedure TDataSet.DataEvent(Event: TData

我们正在将我们的XE项目迁移到XE5,但是,在测试期间,我们遇到了关于teechart的访问冲突异常

我已经创建了一个测试应用程序来重新创建问题。对于测试应用程序,当打开第一个teechart表单时,它可以正常工作,但当第二次打开它或打开新表单时,它将获得访问冲突异常

请参考以下QC(embarcadero)随附的测试应用程序

当使用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;
过程TDataSet.DataEvent(事件:TDataEvent;信息:nativent);
开始
...
如果通知数据源,则
开始
对于I:=0到FDataSources.Count-1 do
FDataSources[I].数据事件(事件,信息);// 正如质量中心所说:

它与在内部使用内部TObjectList泛型集合有关 数据库图表。代码已得到改进,因此错误现在已修复(新版本) 代码负责正确销毁ObjectList项)

作为一种解决方法,您可以在表单的OnClose事件中添加以下代码:

type
  TChartAccess=class(TDBChart);

procedure TOutcomesGraphFm.bbtnCloseClick(Sender: TObject);
begin
  TChartAccess(dbcBar).RemovedDataSource(bsTestScores,bsTestScores.DataSource);

  Close;
end;

Delphi v19.0.14356.6604;TDBChart:“用于RAD Studio的TeeChart Lite,Delphi,C++Builder XE5更新2”。欢迎来到StackOverflow。请在此处发布您的测试应用程序的相关代码。期望人们去EMBT下载它只是为了弄清楚你在问什么并不是StackOverflow的工作原理。如果由于某种原因外部链接不可用,则会使您的问题变得毫无意义,并且未来读者在搜索类似问题的解决方案时也无法找到该代码。谢谢