2009-04-02 19 views
0

Ich versuche, die Anwendung einige zu schließen, wenn ein anderer Thread beendet. Ich benutze C#. folgende Code ist nur ein BeispielSchließen Haupt von einem anderen Thread

class main 
{ 
    constuctor 
    { 
    thread t = new thread(open loading screen); 

    } 

    public void open loading screen() 
    { 
    if (error) 
    exit program 
     application.exit(); // doesn't work 
    this.Close; // doesn't work 
    thread.abort or mainform.abort doesnt work. 
    } 
} 

wenn i eine Funktion auf der Haupt mit Application.Exit diese nicht funktioniert nennen, weil der Anruf von einem anderen Thread durchgeführt wird.

also wie verlasse ich das Programm ??

Dank im Voraus

Antwort

1

der Arbeiter-Thread eine Variable oder signalisieren ein Ereignis von einer Art, dass der Haupt-Thread sollte in regelmäßigen Abständen überprüfen eingestellt sollten - kann er in der normalen Weise herunterzufahren, wenn es in der Lage ist.

1

Verwenden der Arbeiter Klasse Hintergrund statt eines normalen Gewinde. Der Hintergrundarbeiter kann verwendet werden, um in einem anderen Thread als dem UI-Thread zu arbeiten. Es hat auch einige praktische Ereignisse, die verwendet werden können, um Fortschritts-Updates zurück an den "Owning" -Thread zu senden. Schauen Sie sich auf:

ProgressChanged und RunWorkerCompleted

0

nach viel Kopf vernichtende ich denke, ich einige Fortschritte gemacht haben. Ich bin nicht 100% sicher, aber können Sie eine Anwendung beenden, bevor der Konstruktor fertig ist und das Hauptformular geladen ist?

constuctor { thread t = new thread(open loading screen); } 

Ich mache die gleiche Sache mit einem Exit-Bildschirm mit einer Variablen zwischen dem Haupt für und einen anderen. und ich habe einen Anwendungsexit für den Fall, dass es wahr zurückgibt.

Am Anfang habe ich einen Ladebildschirm, aber die Hauptform ist noch nicht geladen und der Aufruf wurde vom Konstrukteur gemacht und der Konstrukteur ist noch nicht fertig.

Und noch eine Sache sollte die gesamte thread/class/loading // Programm-Setup im Hauptkonstruktor oder auf andere Weise getan werden, wenn ja bitte beraten.

dank

0

Hier ist die Lösung in einer Zeile Code

mainForm.Invoke((MethodInvoker)(() => mainForm.Close())); 

eine Abschlussveranstaltung in Mainform haben, die den Faden schließt, wenn es in der Nähe von es nach dieser

selbst tut
Verwandte Themen