Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] Cross thread

Change un form d'un autre thread

Sujet résolu
    7 février 2012 à 13:38:12

    Bonjour,

    J'aimerai changer un ".Text" d'un autre form en c#
    Le problème c'est que j'ai une erreur la fameuse "Cross Thread"...

    Je sais qu'il faut utiliser les "Invoke", mais je ne trouve pas, j'ai déjà chercher 1 heures sur google au moins.

    Le code
    namespace Eternity
    {
        public partial class Updater : Form
        {
            private string UpdaterVersion, Version;
    
            public Updater()
            {
                InitializeComponent();
            }
    
            private void Updater_Load(object sender, EventArgs e)
            {
                this.UpdaterVersion = "1.0.0";
    
                Thread Updater = new Thread(new ThreadStart(GetVersion));
                Updater.Start();
            }
    
            private void GetVersion()
            {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/api/GetVersion.php");
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    StreamReader stream = new StreamReader(response.GetResponseStream());
    
                    this.Version = stream.ReadToEnd();
    
                    stream.Close();
                }
                catch
                {
                    ChangeStatus(Color.Red, "Impossible de vérifier les mises à jour...");
                    Thread.Sleep(2500);
                    Thread.CurrentThread.Abort();
                }
            }
    
            private void ChangeStatus(Color color, string text)
            {
                Status.ForeColor = color;
                Status.Text = text;
            }
        }
    }
    


    En espérant que vous puissiez m'aider.

    Cordialement, Jordan
    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2012 à 14:03:45

      Problème résolu, j'ai fais:

      private void ChangeStatus(Color color, string text)
              {
                  if (Status.InvokeRequired)
                  {
                      Status.Invoke((MethodInvoker)delegate()
                      {
                          ChangeStatus(color, text);
                      });
                  }
                  else
                  {
                      Status.ForeColor = color;
                      Status.Text = text;
                  }
              }
      
      • Partager sur Facebook
      • Partager sur Twitter

      [C#] Cross thread

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown