GUI hängt nach Entsperrung des PCs!

Steiner123

Grünschnabel
Hi,
ich hab mal wieder ein Problem bei dem ich einfach nicht weiter weiß.

Ich habe ein Programm welches einen Backgroundworker enthält der verschiedene Aktionen mit Excel und Powerpoint durchführt. Außerdem erzeuge ich innerhalb des Backgroundworkers eine Instanz einer Form um auf deren Funktionen zugreifen zu können. (Form wird nicht mit Show() angezeigt).

Die Aktionen können alle schon mal eine Stunde in Anspruch nehmen, deshalb ein eigener Thread damit ich das Programm noch nutzen kann. Eine ProgressBar holt sich immer den aktuellen Status (ProgressChanged Event).

Mein Programm funktioniert 1A.

Sobald ich ABER meinen PC sperre und ihn danach wieder entsperre kann es sein das das Programm(GUI) hängt, der Thread aber wird ohne Probleme ausgeführt.

--> Thread-Ergebnis (PowerPoint Präsentation) wird erstellt aber Programm lässt sich nicht mehr bedienen.

Es hängt nur die GUI, alle andern Windowsanwendungen funktionieren.

Ich vermute es hängt mit Visual Studio zusammen, denn wenn ich das Programm mit Hostprozess(Debugoptionen) starte funktioniert alles, auch PC sperren/entsperren.

Starte ich das Programm jedoch ohne Hostprozess hängt es sich beim sperren/entsperren auf.

Danke für eure Mühe

Gruß
 
Ich verstehe gerade "sperren" nicht :confused:

Ansonsten rate ich dir die Form aus dem BackgroundWorker rauszunehmen.
Brauchst du Funktionen aus ihr dann erstellt diese in einem extra Objekt, das ist so einfach nicht sauber und ev. hängt es ja deswegen.

Wundere mich eigentlich das keine Thread übergreifende Warnmeldung kommt, aber wahrscheinlich hast du da noch keine GUI Elemente genutzt aus der Form.

Oder aber die Exception erscheint, deshalb steht der Bildschirm und die Meldung wird aus irgend einem Grund unterdrückt, hängt ev. im Hintergrund.
 
Hi Spyke,

danke für die schnelle Antwort. Mit sperren meine ich das sperren des Computers (Strg + Alt + Entf --> Computer sperren).

Innerhalb des Backgroundworkers wird die Form erstellt und auch deren Controls benutzt (lässt sich nicht vermeiden).

Das komische ist, sperre ich den PC nicht dann läuft alles 1A. Sperre ich den PC\Bildschirm jedoch so hängt sich die GUI auf.

Ich bin mir sicher das es mit dieser Form zu tun hat, allerdings verstehe ich nicht warum es ohne Sperrung klappt und mit Sperrung eben nicht.

Ich hab schon versucht per AppDomain die vshost.exe(mit der klappt ja alles) nach zu stellen allerdings ohne Erfolg. Irgendwas muss die vshost anders machen.

Gruß
 
Muss es wirklich sein, dass du im BackgroundWorker die Form erstellst? Du hast nehme ich an, sicher noch ein Hauptform, kannst nicht in dessen Thread die Form erstellen, und über Invoke aus dem BackgroundWorker die Funktionen nutzen?

Aber ich frag mich auch, was für Funktionen der Form du da brauchst? Ist das Code den du (in einer Form-Klasse) geschrieben hast, oder wirklich Form-spezifischer Code?


lg,..
 
Hi, die Form kann ich zur Not auch außerhalb des BW erzeugen.

Es werden so einige Funktionen\Controls aus der Form benötigt welche unter anderem ListBoxen füllen, ...!

Das Problem an der Form ist, dass sie vor langer Zeit in VB.net geschrieben und auf eine Objektorientierung verzichtet wurde.

Kann man irgendwie mit nur einem Aufruf die ganze Form (mit Controls) invoken?
 
Hi

VB.NET ohne OOP? Interessant! :confused:

Eine Form zum Aufruf irgendwelcher Methoden zu nutzen ist aus meiner Sicht eindeutig das falsche Anwendungsdesign. Eine Form hat in einem Hintergrund-Thread nix zu suchen (darum heißt er auch so). Wie Spike schon geschrieben hat. Pack die entsprechenden Methoden in eine extra Klasse und nutz die.
Und ich wüsste auch nicht, warum man eine ListBox braucht, ohne jemals die Form zu zeigen.

Und was verstehst du unter "die ganze Form invoken"?
 
Hi,
Eine Form zum Aufruf irgendwelcher Methoden zu nutzen ist aus meiner Sicht eindeutig das falsche Anwendungsdesign

stimm ich dir voll und ganz zu. Nur muss ich mit dem, was da ist, irgendwie zurecht kommen. Und eine Form die die komplette Funktionalität hat (9000 Zeilen Code) lässt sich nicht ohne weiteres in eine eigene "Funktionalitäts-Klasse" auslagern.

Die Form wird auch als eigene Anwendung benutzt und ich brauch einfach die Funktionalität in meinem Programm.

Und ich wüsste auch nicht, warum man eine ListBox braucht, ohne jemals die Form zu zeigen.

Kann ich dir auch nicht beantworten, es ist halt so. Die Listbox enthält Daten, die für weitere Aktionen wichtig sind.

"Form invoken":
Wenn ich aus einem Thread (der es nicht erstellt hat) auf ein Control zugreifen will muss ich dieses "invoken". Da aber auf sehr viele Controls zugegriffen werden muss wollte ich diese in einem Schwung invoken. (falls es geht)

Was mich auch noch brennend interessieren würde ist das Verhalten mit und ohne Hostprozess. Denn mit "vshost.exe" funktioniert ALLES.

Ich hab schon mit AppDomain die exe-Assembly zum laufen gebracht allerdings schmiert mir die Anwendung trotzdem ab. Was macht Visual Studio anders?

Danke
 
Zurück