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 Phone .NET Discussion :

[WP 7.1 beta 2] Message d'erreur Invalid cross-thread access


Sujet :

Windows Phone .NET

  1. #1
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut [WP 7.1 beta 2] Message d'erreur Invalid cross-thread access
    Salut,

    J'ai utilisé cette solution pour faire un petit programme Windows Phone standard: http://blogs.msdn.com/b/rickyt/archi...ts-in-xna.aspx

    Le bout de code ci-dessous permet de mettre le téléphone en écoute d'un paquet UDP:
    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
    24
    25
    if (IsJoined)
    {
        Array.Clear(this.buffer, 0, this.buffer.Length);
     
        this.client.BeginReceiveFromGroup(this.buffer, 0, this.buffer.Length, result =>
        {
            if (!isDisposed)
            {
                IPEndPoint source;
                try
                {
                    this.client.EndReceiveFromGroup(result, out source);
                    this.OnReceive(source, this.buffer);
                    this.Receive();
                }
                catch (Exception e)
                {
                    throw e;
                    //IsJoined = false;
                    //this.Open();
                }
     
            }
        }, null);
    }
    Lorsque que le paquet arrive la méthode BeginReceiveFromGroup est appelée, puis OnReceive. Celle-ci déclenche un évènement capté par l'UI. A ce moment je souhaite mettre à jour le texte d'un TextBlock.

    Mon soucis c'est que je reçois un vilain message d'erreur:
    Invalid cross-thread access.
    Si je supprime la mise à jour du TextBlock ça passe. Il y a pas mal de littérature sur le Net à ce sujet: http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx.

    Y a-t-il un moyen simple pour éviter ce plantage? Je voudrais éviter de faire du multithreading.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    La modification d'un controle ne peut se faire que sur le thread de l'UI.
    Il faut donc passer par le dispatcher:
    http://msdn.microsoft.com/en-us/libr...er(VS.96).aspx

  3. #3
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Pas besoin de faire du multithread compliqué.

    Avec un truc style (De mémoire, il y a peut-etre des erreurs de syntaxe, mais c'est pour l'exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (LeTextBox.Dispacher.CheckAccess())
    {
    LeTextBox.Text="Data");
    }
    else
    {
    LeTextBox.Dispacher.BeginInvoke(() => LeTextBox.Text="Data");
    }
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LeTextBox.Dispacher.BeginInvoke(() => LeTextBox.Text="Data");
    Perfect!
    "Winter is coming" (ma nouvelle page d'accueil)

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

Discussions similaires

  1. [Batch] sed (de cygwin) dans batch windows : erreur Invalid cross-device link
    Par Christophe P. dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 03/06/2015, 11h11
  2. [fread] Message d'erreur INVALID SIZE
    Par nanouchg dans le forum Images
    Réponses: 0
    Dernier message: 19/08/2011, 14h02
  3. DateTimePicker requete SQL message d'erreur-> invalide token
    Par fifi_dz dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/05/2011, 12h52
  4. Message d'erreur et plantage d'access
    Par polo8687 dans le forum Access
    Réponses: 4
    Dernier message: 28/04/2008, 18h04
  5. [VB.NET]Erreur "invalid cross-thread operation"
    Par NicolasJolet dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/04/2006, 12h38

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