Da ist es noch nie zu einer Endlosschleife gekommen ... ich wüsste jetzt auch nicht, wie es dazu kommen sollte.
OK, ich könnte mir eventuell denken, wie es dazu kommen könnte, aber das liegt halt an dem "falschen" Verhalten. (würde nicht passieren, wenn es "richtig" funktionieren würde
)
Es gibt auch noch eine ganz billige Methode ohne Thread. Dabei wird der Code am Ende der Methode/Prozedur ausgeführt:
Ist noch zu früh ... erstmal muß der ganze DevExpress- und
VCL-Rotz "hinter" dem END auch noch ausgeführt werden, weil es sonst knallt.
Sieht bei mir praktisch so aus.
Heißt nur deshalb nicht .Queue, damit der Compiler meckert, wenn man vergessen hat die
Unit mit dem Helper einzubinden.
Delphi-Quellcode:
type
TThreadHelper =
class helper
for TThread
public
{$REGION 'Documentation'}
/// <summary>
/// BUGFIX: Da TThread.Queue vom Hauptthread aus nicht in der Queue landet, sondern sofort ausgeführt wird.
/// </summary>
{$ENDREGION}
class procedure Queue_Bugfix(AThread: TThread; AThreadProc: TThreadProcedure);
overload;
static;
end;
class procedure TThreadHelper.Queue_Bugfix(AThread: TThread; AThreadProc: TThreadProcedure);
begin
if (MainThreadID = CurrentThread.ThreadID)
and not Assigned(AThread)
then begin
// wenn im Hauptthread aufgerufen, dann an Thread übergeben
// die **** führen das sonst sofort aus, anstatt es an die Queue zu übergeben
CreateAnonymousThread(
procedure
begin
try
Queue(AThread, AThreadProc);
except
on E:
Exception do
ShowException(E,
nil);
end;
end).Start;
end else
Queue(AThread, AThreadProc);
end;