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] Modification de la propriété Title génère une System.InvalidOperationException


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut [WPF] Modification de la propriété Title génère une System.InvalidOperationException
    Bonjour,

    Tout est dans le titre, quand je souhaite modifier la propriété Title de ma MainWindow, ou même que je tente d'appeler une quelconque méthode de cette propriété: une exception System.InvalidOperationException est générée. Why?

    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
     
            private void FileChanged( object sender, FileSystemEventArgs e )
            {
                if ( e.FullPath == currentFile )
                {
                    if ( Title.Contains( '*' ) ) //Exception générée
                    {
                        Title.Remove( Title.LastIndexOf( '*' ) );
                    }
     
                    Title = Title.Split( '-' )[ 0 ] + "- " + e.FullPath;
                    fileModified = false;
                    fileSaved = true;
                }
            }

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Je ne vois pas vraiment pourquoi cette exception arrive...
    FileChanged n'appartient pas dans un autre thread (je demande, mais ca ne devrait pas être la même exception).

    Sinon pour information, la ligne suivante :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    Title.Remove( Title.LastIndexOf( '*' ) );
    s'écrit plutôt
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    Title = Title.Remove( Title.LastIndexOf( '*' ) );

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut
    La méthode FileChanged est émise par un FileSystemWatcher. Je viens d'ouvrir un nouveau projet, modifier le Title de la fenetre, il n'y a aucun problème à ça...Je vois pas en quoi mon FileSytemWatcher viendrait mettre le bordel dans cette exécution ...Merci binoo pour ta suggestion, oui en effet, je pensais que c'était une String qui était utilisée et non une string.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Cet événement est déclenché sur un autre thread, il faut donc utiliser un Dispatcher pour pouvoir modifier une donnée du thread de l'interface :

    Soit :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        private void FileChanged( object sender, FileSystemEventArgs e ) {
          Application app = System.Windows.Application.Current;
          if (app != null)
            app.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background,
                                       (Action)delegate {
              if (Title.Contains('*')) {
                Title = Title.Remove(Title.LastIndexOf('*'));
              }
              // etc.
            });
        }

    J'ai lu en diagonale la doc msdn et j'ai pas cru voir l'info... Mais après test, le détail de l'exception confirme ce point :
    Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread en est propriétaire.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut
    Oui c'est ce que j'ai fait et ça marche!

    Merci beaucoup!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/01/2011, 14h56
  2. [WPF]Binding d'une propriété contenu dans une propriété
    Par Babas007 dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 23/11/2010, 20h51
  3. [WPF] binder la propriété SelectedIndex d'une listbox
    Par maa dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 07/01/2008, 17h57
  4. Réponses: 2
    Dernier message: 02/07/2007, 15h17

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