第二次打开 teechart 窗体时出现访问冲突



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

我创建了一个测试应用程序来重现该问题。使用测试应用程序,它在打开第一个 teechart 表单时工作正常,但在第二次打开它或打开新表单时会出现访问冲突异常。

请参考以下QC(内河码头)的随附测试应用程序。

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;

正如David Berneda在Quality Central所说:

它与在内部使用内部 TObjectList 泛型集合有关 DBChart。代码已得到改进,因此错误现已修复(一个新的 代码负责正确销毁对象列表项)。

作为解决方法,您可以在窗体的 OnClose 事件中添加此代码:

type
  TChartAccess=class(TDBChart);
procedure TOutcomesGraphFm.bbtnCloseClick(Sender: TObject);
begin
  TChartAccess(dbcBar).RemovedDataSource(bsTestScores,bsTestScores.DataSource);
  Close;
end;

相关内容

  • 没有找到相关文章

最新更新