procedure TSplashView.LoadMainForm;
begin
ActivityIndicator.Visible := true;
ActivityIndicator.Enabled := true;
fLastUpdate := TThread.Gettickcount;
TLog.d('
Loading AppViewModel Start');
//Achtung: erzeugt Application.Processmessages
anonthread.TAnonymousThread<Boolean>.create(
Function:Boolean
Begin
Result := True;
TAppViewModel.Create(application);
TLog.d('
Loading AppViewModel Finish');
end
,
Procedure(res:Boolean)
begin
Try
TLog.d('
Loading MasterView Start');
Application.MainForm := TMasterForm.Create(Application);
TLog.d('
Loading MasterView Finish');
//SplashView ist jetzt nicht mehr die mainform aber sichtbar, implizit wird auf der logtext auf Splashview ausgegeben und Application.preocessmessages aufgerufen
TLog.d('
Display MasterView');
Application.MainForm.Show;
TLog.d('
Display MasterFinish');
//Achtung: erzeugt Application.Processmessages
TLog.getInstance.LogListener :=
nil;
ActivityIndicator.Enabled := false;
ActivityIndicator.Visible := false;
Close;
except
on e:
exception do
Begin
ShowSyncedMessage('
Error after LoadMainForm: ' + e.
message);
end;
end;
end
,
Procedure(E:
Exception)
Begin
TLog.d('
Error in LoadMainForm: ' + e.
message);
//Achtung: erzeugt Application.Processmessages
InfoLBL.Visible := true;
ShowSyncedMessage('
Error in LoadMainForm: ' + e.
message);
end
);
end;
procedure TSplashView.OnLogEvent(aText:
String);
begin
if TThread.CurrentThread.ThreadID <> MainThreadID
then
Begin
TThread.Queue(TThread.CurrentThread,
procedure
Begin
if (TThread.GetTickCount - fHangtime_Started > HANGDURATION)
then
InfoLBL.Visible := true;
infoLBL.Text := infoLBL.Text+linefeed+aText;
end);
end
Else
Begin
if (TThread.GetTickCount - fHangtime_Started > HANGDURATION)
then
InfoLBL.Visible := true;
infoLBL.Text := infoLBL.Text+linefeed+aText;
// WICHTIG ActivityIndicator wird nur animiert wenn Application.ProcessMessages läuft
// das liegt irgendwie daran dass die Datenbankverbindung im Hauptthread läuft !
Application.ProcessMessages;
End
end;