2009-04-02 4 views
0

J'essaie de fermer l'appliaction un peu quand un autre fil finit. J'utilise C#. le code ci-dessous est juste un exemplefermeture de la ligne principale à partir d'un autre filetage

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. 
    } 
} 

si j'appeler une fonction sur la principale avec application.exit ce travail ne marche pas parce que l'appel est fait à partir d'un autre thread. Alors, comment quitter le programme?

merci à l'avance

Répondre

1

Le thread de travail doit définir une variable ou un signal d'un événement de quelque sorte que le thread principal doit vérifier périodiquement - il peut arrêter de façon normale quand il est capable.

1

Utilisez la classe des travailleurs de fond au lieu d'un fil ordinaire. L'arrière-plan peut être utilisé pour travailler dans un autre thread que le thread de l'interface utilisateur. Il comporte également des événements pratiques qui peuvent être utilisés pour renvoyer les mises à jour de progression au thread «propriétaire». Jetez un oeil à:

ProgressChanged et RunWorkerCompleted

0

après beaucoup de la tête cinglante je pense avoir fait quelques progrès. Je ne suis pas sûr à 100% mais pouvez-vous quitter une application avant que le constructeur est terminé et la forme principale chargée? Je fais exactement la même chose avec un écran de sortie utilisant une variable entre le principal et l'autre. et j'ai une sortie d'application dans la main pour si elle retourne vrai.

Au début j'ai un écran de chargement, mais la principale forme isnt encore chargé et l'appel a été fait à partir du constructeur et la construtor n'a pas encore fini.

Et une chose devrait tout le fil/classe/chargement // configuration du programme se fait dans le constructeur principal ou d'une autre manière si oui s'il vous plaît conseiller.

grâce

0

Voici la solution dans une ligne de code

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

ont un événement de clôture à mainform qui ferme le fil si elle ne marche pas à proximité elle-même après cette

Questions connexes