Einzelnen Beitrag anzeigen

deadcantdance

Registriert seit: 25. Feb 2008
81 Beiträge
 
Delphi 2007 Professional
 
#1

Probleme mit PostMessage aus einem Thread

  Alt 6. Feb 2009, 15:28
Hi,

sporadisch habe ich das Problem, dass mein Zeichnen der Controls auf meinem Formular Exceptions auftreten. Nach einiger Suche bin ich auf die vermutlichen Ursache gestoßen:

Ich habe ein Control, abgeleitet vom VirtualStringTree. Dieses Control besitzt eine Methode, die aus einem anderen Thread aufgerufen wird, um dem Control mitzuteilen, dass es sich aktualisieren soll. Um nicht direkt aus dem anderen Thread zu zeichnen, gehe ich wie folgt vor:

Delphi-Quellcode:
procedure MyControl.DoCallback;
begin
  PostMessage(Self.Handle, WM_MYCONTROLRELOAD, 0, 0);
end;
Außerdem gibt es noch eine Methode, die auf diese Nachricht reagiert:
Delphi-Quellcode:
procedure DoControlReload( var Message: TMessage); message WM_MYCONTROLRELOAD;

procedure MyControl.DoControlReload( var Message: TMessage);
begin
  ReloadfromDB;
  Invalidate;
end;
Das Problem ist nun, dass die Zeichenroutine des Controls aus dem Thread aufgerufen wird, der auch die Callback aufgerufen hat. Bisher war ich davon ausgegangen, dass wenn ich eine Nachricht mit PostMessage an mein Control schicke, diese auch im Hauptthread abgearbeitet wird. Das ist anscheinend nicht der Fall?!

Zusätzlich möchte ich noch erwähnen, dass der Thread im Execute eine while-Schleife beinhaltet, in der auch Application.ProcessMessages aufgerufen wird.

Meine Frage an Euch: Wie kann ich nun verhindern, dass die Zeichenroutine des Controls aus dem anderen Thread aufgerufen wird?

Viele Grüße,
deadcantdance
  Mit Zitat antworten Zitat