Многопоточность |
Top Previous Next |
FastReport может работать независимо в разных потоках, но имеется ряд особенностей:
- Нельзя создавать TfrxDBDataSet с одинаковыми именами даже в разных потоках, т.к. для поиска используется "глобальный список" и обращение всегда будет происходить к первому созданному TfrxDBDataSet(использование глобального списка можно отключить, по умолчанию активен);
- Если во врем выполнения отчета происходит изменение св-в объектов(для примера Memo1.Left := Memo1.Left + 10 в скрипте), то следует помнить, что при последующим выполнении если св-во TfrxReport.EngineOptions.DestroyForms := False шаблон отчета уже будет модифицирован и его необходимо заново загрузить или использовать TfrxReport.EngineOptions.DestroyForms := True. При восстановления из потока нельзя использовать интерактивные отчеты, т.к. объекты скрипта уничтожаются после восстановления, поэтому в некоторых случаях рациональней использовать TfrxReport.EngineOptions.DestroyForms := False и восстанавливать шаблон самостоятельно при следующем цикле построения.
При необходимости глобальный список, по которому осуществляется поиск экземпляров TfrxDBDataSet можно отключить.
{DestroyForms можно отключить, если каждый раз восстанавливать отчет из файла или потока} FReport.EngineOptions.DestroyForms := False; FReport.EngineOptions.SilentMode := True; {Данное св-во отключает поиск по глобальному списку} FReport.EngineOptions.UseGlobalDataSetList := False; {EnabledDataSets играет роль локального списка, нужно устанавливать до загрузки шаблона} FReport.EnabledDataSets.Add(FfrxDataSet); FReport.LoadFromFile(ReportName); FReport.PrepareReport;
|