Ich verwende eine 3rd-Party-Bibliothek, die viele Threads verwendet.Senden Sie eine Nachricht direkt aus einem Thread an ein Objekt, ohne das Hauptformular zu verwenden
Ich habe gerade begonnen, Nachrichten zu verwenden, um zurück zum Haupt-Thread von einem Thread zu kommunizieren. Es funktioniert alles, aber das Verwenden von SendMessage, wie ich unten beschreibe, scheint umständlich, da das Hauptformular alle Nachrichten senden muss. Gibt es eine Möglichkeit, eine Nachricht direkt an einen Rahmen oder ein Objekt zu senden, ohne vom Hauptformular abhängig zu sein?
beim Programmstart:
MyMessageNumber1 := RegisterWindowMessage('MyUniqueID1');
MyMessageNumber2 := RegisterWindowMessage('MyUniqueID2');
Wenn Sie eine Nachricht ohne Daten zu senden, das tue ich:
SendMessage(Application.MainForm.Handle, MyMessageNumber1)
Meine Hauptform hat dies:
procedure WndProc(var Message: TMessage); override;
if (Message.Msg = MyMessageNumber1)
... call a frame or other object's method that handles this particular message
else if (Message.Msg = MyMessageNumber2) then
... call another ....
else
inherited;
Zusammengefasst: die über WndProc muss weit mehr wissen, als ich über alle Nachrichten vorziehen würde und wem sie zu schicken.
Wie kann ich eine Nachricht direkt aus einem Thread senden, so dass jedes Objekt sie empfangen kann?
Für alle diese Nachrichten sind keine Daten zugeordnet. (Wir werden an einem anderen Tag zu das!) :-)
TIA
Ich finde es schwierig, die Vorstellung zu akzeptieren, dass WndProc jemals zu viel über Nachrichten wissen könnte. Die Verarbeitung von Nachrichten ist der ** Job ** von WndProc. –
#Rob Kennedy - Aber wenn der WndProc in der Hauptform ist (wie ich dachte, war notwendig, also diese Frage), dann würde die Hauptform über alle Arten von Details von Low-Level-Code wissen müssen, damit es Nachrichten an sie versenden konnte. Warum sollte das Hauptformular irgendwelche internen Details eines Low-Level-Codes wissen müssen, wenn, wie Mason darauf hinweist, der Low-Level-Code die Nachricht explizit abfangen kann? – RobertFrank