Hallo Zusammen,
ich versuche gerade die Methode GetGruppen in einem AnonymusThread zu packen.
Dabei stellen sich mir eine Menge Frage. Die Methode GetGruppen ist in einem Adroid Mobile Projekt
und ruft über die Methode DataModule1.ServerMethods1Client.GetGruppen ein Dataset aus einem DataSnap Server
und speichert das Ergebnis in ein lokales JASONDataSets Object. Das dürfte im Thread noch keine Probleme machen
das keine Aktionen Objkte auf dem MainThread tangieren.
Die Methode UpdateGruppenNames jedoch packt das JASONDataSets in einer FDMemTable die auf der MainForm liegt.
Mir ist bekannt dass nur der MainThread auf Objekte der Form zugreifen darf. Ist jetzt eine FDMemTable
ebenfalls davon betroffen oder nur Objekte die etwas anzeigen wie z.B.: TLabel, TListView u.s.w.?
Die nächste Frage, was ist mit der
Exception innerhalb des Threads, darf ich die ShowMessageFmt werfen
oder muss das in einem TThread.Synchronize erfolgen?
Ohne Thread
Delphi-Quellcode:
procedure TfrMobileMain.GetGruppen;
var
LDataSetList: TFDJSONDataSets;
begin
try
//vom DataSnap Server ein DataSet abrufen
LDataSetList := DataModule1.ServerMethods1Client.GetGruppen;
//das DataSet in die MemTable packen
UpdateGruppenNames(LDataSetList);
except
on E: TDSRestProtocolException
do
HandleRestException(DataModule1.DSRestConnection1, '
Get Gruppen error', E);
on E:
Exception do
ShowMessageFmt('
Fehler: %s',[E.
Message]);
else
raise;
end;
end;
Mit Thread
Delphi-Quellcode:
procedure TfrMobileMain.GetGruppenThreaded;
begin
TThread.CreateAnonymousThread(
procedure ()
var
LDataSetList: TFDJSONDataSets;
begin
try
LDataSetList := DataModule1.ServerMethods1Client.GetGruppen;
UpdateGruppenNames(LDataSetList);
// TThread.Synchronize (TThread.CurrentThread,
// procedure ()
// begin
// end);
except
on E: TDSRestProtocolException
do
HandleRestException(DataModule1.DSRestConnection1, '
Get Gruppen error', E);
on E:
Exception do
ShowMessageFmt('
Fehler: %s',[E.
Message]);
else
raise;
end;
end).Start;
{TThread}
end;
Gruß Kostas