Какой Best practice в создании свойств-списков объектов в COM в многопоточных приложениях?
Имеем многопоточное приложение и интерфейсы:
ITTestItem = interface(IDispatch)
['']
function Get_Data: Integer; safecall;
property Data: Integer read Get_Data;
end;
ITTestItemDisp = dispinterface
['']
property Data: Integer readonly dispid 201;
end;
ITTest = interface(IDispatch)
['']
function Get_Items(Index: Integer): ITTestItem; safecall;
function Get_Count: Integer; safecall;
function Add: ITTestItem; safecall;
function _NewEnum: IUnknown; safecall;
property Items[Index: Integer]: ITTestItem read Get_Items;
property Count: Integer read Get_Count;
end;
ITTestDisp = dispinterface
['']
property Items[Index: Integer]: ITTestItem readonly dispid 201;
property Count: Integer readonly dispid 202;
function Add: ITTestItem; dispid 203;
function _NewEnum: IUnknown; dispid -4;
end;
ITApp = interface(IDispatch)
['']
function Get_Test: ITTest; safecall;
property Test: ITTest read Get_Test;
end;
1. Как реализовать возврат списка?
1.1. Создавать новую копию списка каждому запросившему, но при этом будут недоступны изменения в списке без запроса новой копии
1.2. Выдавать ссылку на имеющийся общий список, тогда как синхронизировать доступ к нему или оставить это для COM и играться настройками поточности апартмента (хотя в это с трудом верится)
2. О потоко безопасности члена списка позаботится COM есля я выставлю ТредМодельSingle?