AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form.ShowModal im Thread

Ein Thema von gmc616 · begonnen am 6. Dez 2007 · letzter Beitrag vom 7. Dez 2007
 
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#1

Form.ShowModal im Thread

  Alt 6. Dez 2007, 00:24
Guten Abend DP,

ich fange an mich mit Threads zu beschäftigen. Die ersten paar Threads hab ich auch schon erfolgreich hin gekriegt. So werden in meinem MP3-Player die ID3-Tags in einem Thread ausgelesen und in ein Listview geschrieben. Ob das ganze thread-safe ist weiß ich nicht, aber es funktioniert prima.

Nun möchte ich einen Schritt weiter gehen, und zwar ein Suche-Dialog in einem Thread laufen lassen.

Hintergrund: Auf meinem Hauptfenster wird über einen Timer eine Animation berechnet und dargestellt.
Wenn ich in meinem Suche-Dialog eine Suche starte, animiert meine Animation nicht mehr, da das Suchen die Anwendung blockiert. Klar könnte ich ein ProgressMessages in meine Suche-Funktion einbauen, ist aber nicht Ziel der Sache.

Nun hab ich mir diese Konstruktion in einem Test-Programm zusammen gebastelt.

Delphi-Quellcode:
Type TMyDlgThread = class (TThread)
  private
    FDlg : TMySearchDlg;
    FModalResult : TModalResult;
  public
    Constructor Create(CreateSuspended: Boolean); overload;
    Destructor Destroy (); overload;

    function ShowDlg () : TModalResult;

  protected
    procedure Execute; override;
  end;


constructor TMyDlgThread.Create(CreateSuspended: Boolean);
begin
  inherited;
  self.FreeOnTerminate := false;
  FDlg := TMySearchDlg.Create(nil);
end;

destructor TMyDlgThread.Destroy;
begin
  FDlg.Free;
  inherited;
end;

procedure TMyDlgThread.Execute;
begin
  inherited;
  FModalResult := FDlg.ShowModal;
end;

function TMyDlgThread.ShowDlg: TModalResult;
begin
  Resume;
  WaitFor;
  Result := FmodalResult;
end;
Das ganze endet so, dass mein Suche-Dialog angezeigt wird und dann das ganze Programm stehen bleibt. Nichts geht mehr. Einfach tot, ohne Fehlermeldung und ohne CPU-Last. Nichts!

Was mach ich falsch? Und wie macht man's richtig?

Danke
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz