Window Anwendung von der dll aus starten

CopWorker

Mitglied
Hallo Spyke,

vielen Dank für den Tipp.
Das werde ich heute noch so einbauen.

Aber vom Prinzip her sind doch die Abläufe so korrekt, oder !?.

Ich melde mich wieder.

Grüße CopWorker.
 

Spyke

Premium-User
Sry dafür tu ich mich grad bissi schwer mich da genauer reinzudenken (und zeitlich ;-) ).
Hab nur mehr versucht dein Problem zu verstehen.

Aber, ich glaube alles läuft ja über TestComMain was einfach erstmal eine Klasse ist und diese steuert ja auch die Threads.
Eigentlich sollte das ganze dann eher so aufgebaut sein das du nicht über InvokeRequired deines Controls prüfst, sondern entsprechend selber die Klasse TestComMain sich darum kümmert und das Formular im Hauptthread aufruft.
Vorallem dein Formular könnte disposed sein wenn der Nutzer dies einfach schließt, dann müsste InvokeRequired eine DispsoedException schmeißen.

Kannst dir ja mal z.B. AsyncOperation anschauen, deren Post/Send Methoden führen die übergebene Methode in dem Thread aus in dem das AsyncOperation erstellt wurde.

https://docs.microsoft.com/de-de/dotnet/api/system.componentmodel.asyncoperation?view=net-5.0
InvokeRequired verwende ich eher blos, wenn das Formular/Control selbst eigene Thread startet und diese verwaltet.

kleines AsyncOperation Beispiel:
C#:
        public void StartAsync()
        {
            AsyncOperation _ao = AsyncOperationManager.CreateOperation(null);
            Task.Factory.StartNew(() => DoAsync(_ao));
        }

        private void DoAsync(AsyncOperation _ao)
        {
            //...
            
            //Methode aufruf im Thread wo _ao erstellt wurde
            _ao.SynchronizationContext.Send((oo) => {/* was machn */ }, null);
            
            //...
            
            //Methode aufruf im Thread wo _ao erstellt wurde
            _ao.Post((oo) => {/* was machn */ }, null);
        }
 

CopWorker

Mitglied
Hallo Spyke,

den Thread zum Auslesen der Queue erzeuge ich schon in der Dialogklasse "TestComMainDlg".
Denn die Inhalte der Queue sind für die Dialogklasse relevant um diese anzuzeigen.

Es soll auch möglich sein von einem Programm, welches die DLL (da ist die TestComMain drin)
verwendet, auf die Inhalte der Queue zugreift. In diesem Fall muss der Thread in diesem Programm
eingerichtet werden.

Alles zu kompliziert, ist aber so vorgegeben vom Chef.
Ober sticht Unter, aber das weißt du bestimmt schon.

Vielen Dank.
Grüße von CopWorker
 

Neue Beiträge