IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

[WPF] Instanciation WPF à partir Console


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut [WPF] Instanciation WPF à partir Console
    Bonsoir à tous,

    Comme dit dans l'énoncé du topic, j'instancie à la demande de l'utilisateur,
    une fenêtre WPF à partir d'une application console.

    Tout fonctionne bien au début, la fenêtre s'affiche etc...

    À un moment, on peut demander la fermeture de l'application depuis la console, celle-ci se ferme correctement, cependant lors de la réouverture j'ai l'exception suivante :

    Impossible de créer plusieurs instances System.Windows.Application dans le même AppDomain.


    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private Messenger Window = null;
            private System.Windows.Application App = null;
            private delegate void Msg();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
                try
                {
                    if (this.Window == null)
                    {
                        Thread T = new Thread(new ThreadStart(delegate
                        {
                            try
                            {
     
                                this.App = new System.Windows.Application();
                                this.Window = new Messenger();
                                this.App.Run(Window);
                                this.Window.Show();
                            }
                            catch (Exception E)
                            {
    // EXCEPTION LEVÉE ICI
                            }
                        }));
                        T.SetApartmentState(ApartmentState.STA);
                        T.Start();
                    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public void Test()
            {
                if (this.Window != null)
                {
                    this.App.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Msg(this.ShutdownMessage));
                }
     
            }
            public void ShutdownMessage()
            {
                this.App.Shutdown();
                this.App = null;
                this.Window = null;
            }
    Si vous avez une idée..

    Merci d'avance,
    NeoKript


    Edit :

    C'est this.App = new System.Windows.Application(); qui lève l'exception !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    D'après MSDN :
    Une seule instance de la classe Application peut être créée par AppDomain, pour garantir l'accès partagé à un jeu unique de données de fenêtres, de propriétés et de ressources de portée application.Par conséquent, le constructeur par défaut de la classe Application détecte si l'instance qui est initialisée est la première instance d'un AppDomain ; si ce n'est pas le cas, une InvalidOperationException est levée.
    Du coup pourquoi ne pas initialiser une seule fois ton instance App au démarrage de l'application console et ne pas avoir à le répéter à chaque foi que ton thread s'exécute ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Salut,

    D'après MSDN :


    Du coup pourquoi ne pas initialiser une seule fois ton instance App au démarrage de l'application console et ne pas avoir à le répéter à chaque foi que ton thread s'exécute ?
    Salut,

    le but est que l'application ne consomme pas de mémoire inutilement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Thread T = new Thread(new ThreadStart(delegate
                        {
                            try
                            {
                                if (this.App == null)
                                    this.App = new System.Windows.Application();
                                this.Window = new Messenger(this, User);
                                this.App.Run(this.Window);
                                this.Window.Show();
                            }
                            catch (Exception E)
                            {
     
                            }
                        }));
    j'ai test ceci ainsi seul l'application est conservé mais j'ai une exception :
    this.Window = new Messenger(this, User);

    L'application est en cours de fermeture même lorsque je laisse un délais suffisant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/03/2011, 18h55
  2. [C#] Instancier control à partir d'une URI
    Par NeoKript dans le forum Framework .NET
    Réponses: 2
    Dernier message: 13/01/2011, 17h10
  3. [WPF] Pourquoi WPF
    Par DotNET74 dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 19/11/2008, 16h35
  4. Affichage d'une fenêtre WPF à partir d'une app console
    Par pcayrol dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 29/03/2008, 15h56
  5. Problème instanciation TQuery en console
    Par nekrotik666 dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/03/2008, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo