Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   C# von Workerthread Methode des Mainthread aufrufen (https://www.delphipraxis.net/152458-von-workerthread-methode-des-mainthread-aufrufen.html)

sirius 23. Jun 2010 13:59

von Workerthread Methode des Mainthread aufrufen
 
Ich habe eine Methode welche ein paar Datenbankabfragen erledigt. Diese Methode soll in einem extra Thread laufen, weil es auch einmal länger dauern kann.
Diese Aktion kann sowohl händig per Menuclick ausgelöst werden als auch von einem Timer (mit sehr großem Intervall).

Wenn der Thread fertig ist, müssen ein paar Aktionen im Mainthread erledigt werden. Die sind je nach Datenbankabfrageergebnis u.a eine Meldung zeigen oder das TNA-Icon ändern (es ist eine TNA-Anwendung).

Jetzt ist die Frage, wie macht man das? In Win32-Delphi gibt es ja so ein schönes Ereignis namens onTerminate, dass auch gleich im Mainthread läuft. In DotNet habe ich so etwas nicht gefunden.

Neben ThreadPool, der direkten Threadklasse habe ich auch schon versucht mittels Delegates.BeginInvoke zu arbeiten.
Bei letzterem wird nicht nur der Thread gestartet (wie bei allen anderen Varianten auch), sondern ich kann auch eine "EndMethode" angeben. Allerdings läuft die auch asynchron zum Mainthread. Das schönste wäre, wenn ich einfach aus dem WorkerThread eine Methode im Context des Mainthreades aufrufen kann.

Edit: Wo kann ich denn den Titel hier im Forum korrigieren?

Phoenix 23. Jun 2010 14:22

AW: von Workerthread Methode des Mainthread aufrufen
 
Schau mal hier: http://www.hinzberg.net/csharp/cshar...eadinvoke.html

Im Prinzip prüfst Du auf einem Control im Hauptthread, ob es bei 'InvokeRequired' true zurückliefert. Wenn ja, gibst Du einen Delegaten der die Anweisung ausführt mittels Invoke an das Control. Diesen führt das Control dann bei nächster Gelegenheit in seinem Thread-Context aus.

sirius 23. Jun 2010 15:22

AW: von Workerthread Methode des Mainthread aufrufen
 
Danke für den Tipp.

Ich hatte zwar erstmal Probleme ein control in meiner Anwendung zu finden, aber dann habe ich einfach mein Startobjekt (bzw. dessen Klasse) das noch ohne Vorfahr war auf Control aufgesetzt und im Constructor noch CreateHandle aufgerufen.
So geht es zumindest.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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