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

C# Discussion :

Communication interthread avec un composant winform.


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut Communication interthread avec un composant winform.
    Bonjour,

    J'ai quelques interrogations concernant l'assignation de paramètres d'un composant winform durant l’exécution d'un thread (ex: backgroundworker).

    Je pensais que si on assignait une valeur à un composant winform via un autre thread que celui principal, il y avait une exception.

    Pourtant quand j’exécute ce code:

    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
     
            public Form1()
            {
                InitializeComponent();
     
                BackgroundWorker bw = new BackgroundWorker();
     
                textBox1.Text = "test";
     
     
                bw.DoWork += bw_DoWork;
                bw.RunWorkerAsync();
            }
     
            public void bw_DoWork(object sender, DoWorkEventArgs e)
            {
                do
                {
                    string text = textBox1.Text;
                    textBox1.Text = "test1";
                }
                while(true);
            }
    Il n'y a aucun problème ni pour lire la valeur ni pour l'assigner.

    Pourriez vous m’éclairer cette interrogation ?
    Merci.
    F.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 201
    Points : 5 795
    Points
    5 795
    Par défaut
    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    Veillez à ne pas manipuler d'objets interface utilisateur dans votre gestionnaire d'événements DoWork.À la place, communiquez à l'interface utilisateur via les événements BackgroundWorker.

    Du coup, je ne sais pas, je n'utilise pas cet objet.

  3. #3
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Visiblement l'EDI ne lève pas l'exception dans le constructeur ...

    Attendons de voir les autres réponses.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    Citation Envoyé par wallace1 Voir le message
    Visiblement l'EDI ne lève pas l'exception dans le constructeur ...
    En fait l'exception est bien levée, d'ailleurs le backgroundWorker s'arrête. Il déclenche l'évènement RunWorkerCompleted et notifie l'exception dans l'argument RunWorkerCompletedEventArgs.
    d'après Msdn :

    If the operation raises an exception that your code does not handle, the BackgroundWorker catches the exception and passes it into the RunWorkerCompleted event handler, where it is exposed as the Error property of System.ComponentModel.RunWorkerCompletedEventArgs

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut Juste il s'arrête.
    Pour le voir mieux.

    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
          public void bw_DoWork(object sender, DoWorkEventArgs e)
            {
                do
                {
                    try
                    {
                        string text = textBox1.Text;
                        if (textBox1.Text == "nouveau") textBox1.Text = "test1";
                        else textBox1.Text = "nouveau";
                        System.Threading.Thread.Sleep(1000);
                    }
                    catch (Exception except)
                    {
                        MessageBox.Show("exception levée: " + except.ToString());
                    }
                }
                while (true);
            }
    avec dans form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBox1.Text = "nouveau";

Discussions similaires

  1. Réponses: 22
    Dernier message: 28/07/2014, 11h22
  2. E-mail de l'expéditeur avec le composant serveur Outlook
    Par DavFau dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 19/01/2008, 10h09
  3. Réponses: 1
    Dernier message: 18/01/2008, 13h17
  4. Communication RS232 avec un PIC via delphi
    Par JeanPh dans le forum API, COM et SDKs
    Réponses: 22
    Dernier message: 09/08/2004, 22h56
  5. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58

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