begin process at 2010 02 10 11:57:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

Au secours

 > 

actualisation de la form a partir d'un thread.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

actualisation de la form a partir d'un thread.

lundi 30 janvier 2006 à 09:24:50 | actualisation de la form a partir d'un thread.

bwoufy82

Bonjour a tous.
Voiladepuis 3 jours je n arrive pas a trouver comment faire pour que mon thread accede a ma form.
J'esxplique se que je cherche a faire :

J'ai un thread dans un namespace different de celui de ma form et je recois par l intermediaire du tcp/ip
une activation. Lorsque cette valeur est recue, je dois faire apparaitre ma fenetre graphique (qui etait en tray icone) a l'ecran.

J'ai essayé d utiliser des delegate mais je suis perdu.

j aimerai sinon savoir comment faire pr recuperer le pointeur de la vu dans mon thread. Ou alors ya t-il d'autre solutions ?

Merci d avance

lundi 30 janvier 2006 à 09:53:53 | Re : actualisation de la form a partir d'un thread.

MorpionMx

Membre Club Administrateur CodeS-SourceS
Salut,
As-tu lu ce tutorial ?

Sinon, je pense qu'on t'aidera plus facilement si tu nous presente nu bout de code ;)

Mx
MVP C#
 

lundi 30 janvier 2006 à 10:35:26 | Re : actualisation de la form a partir d'un thread.

bwoufy82

Merci bien pour ce tutoriel, oui je l'avais regardé mais je n arrive pas a l utiliser car il me dit le debugeur d'utiliser une methode static.
Cela doit etre parceque je ne suis pas dans le meme namespace.

Voila le code du thread :
--------------------------------------------------------------------------------------------------------
namespace Server {

    public sealed class ServerNamedPipe : IDisposable {
        internal Thread PipeThread;
        internal ServerPipeConnection PipeConnection;
        internal bool Listen = true;
        internal DateTime LastAction;
        private bool disposed = false;

        enum constIpc
        {
            AFFICHER_DIALOG = 10,
            PASSWORD_OK,
            PASSWORD_REFUSE,
        };

        private void traiterRequete(string requete)
        {
            string sParam0;
            Thread.BeginCriticalRegion();
            Console.WriteLine("IPCCom valeur recue : " + requete);

            if (this.requeteRecue(ref requete, out sParam0) == 0)       // si requete valide
            {
                switch (int.Parse(sParam0))
                {
                    case (int)constIpc.AFFICHER_DIALOG:
                       
                        // ici a faire apparaitre la fenetre graphique


                        break;
                }
            }

-------------------------------------------------------------------------------------------------

et le code de ma partie graphique :

namespace MonAppDlg
{
    public partial class AppDlg : Form
    {

        public delegate void afficherFenetreHandler(int val);
        public afficherFenetreHandler afficherFenetre;

        public void afficherFenetreDlg(int step)
        {
            // Mise à jour de la barre de progression
            this.Show();
        }

        public MonAppDlg()
        {
            InitializeComponent();
            afficherFenetre = new afficherFenetreHandler(afficherFenetreDlg); 
        }


       ....

---------------------------------------------------------------------------------------
Voila ca compil sans erreur  mais quand j utilise la ligne pour le Invoke,
il ne le trouve pas et me retourne des erreurs.
Que dois je mettre comme ligne ?


lundi 30 janvier 2006 à 11:11:49 | Re : actualisation de la form a partir d'un thread.

MorpionMx

Membre Club Administrateur CodeS-SourceS
En fait, il faut que ton Thread connaisse ton instance de MonAppDlg.
Ensuite, dans la méthode associée au thread, tu n'as plus qu'a faire

monApp.Invoke(new afficherFenetreHandler(afficherFenetreDlg), tonEntierAPasserEnParam);

monApp etant ton instance de MonAppDlg.

Mx
MVP C#
 

lundi 30 janvier 2006 à 11:38:06 | Re : actualisation de la form a partir d'un thread.

bwoufy82

quand tu parle d'instancier, c'est que le thread doit avoir l'adresse de la fenetre graphique c'est ca ?
Pour l'instancier je dois declarrer une variable de ma fenetre dans mon thread.
Si c'est ca mais ensuite comment faire pour l initialiser ?

j dû mal a comprendre l'instanciation sous c#, prefere le C++
hihi
lundi 30 janvier 2006 à 13:57:10 | Re : actualisation de la form a partir d'un thread.

MorpionMx

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Quand tu instancies la classe dans laquelle se trouve ton thread, passe lui la reference de ta classe MonAppDlg (via la constructeur par exemple).

Petit exemple


namespace namespace1
{
   public class TestForm : Form
   {
      public delegate void ShowFormDelegate();
      public void ShowForm()
      {
         this.Visible = !this.Visible;
      }
      
      public
TestForm()
      {
         ThreadListener tl = new ThreadListener(this);
      }
   }
}

namespace namespace2
{
   public class ThreadListener
   {
         public TestForm form;
         public ThreadListener(TestForm form)
         {
            this.form = form;
            Thread
t = new Thread(new ThreadStart(ThreadMethod));
            t.Start();
         }

         private void ThreadMethod()
         {
            while (true)
            {
               Thread.Sleep(1000);
               form.Invoke(
new TestForm.ShowFormDelegate(form.ShowForm), null);
            }
         }
   }
}




Mx
MVP C#
 



Cette discussion est classée dans : form, partir, actualisation, thread


Répondre à ce message

Sujets en rapport avec ce message

Problème de thread, socket et form [ par Florynth ] Bon pas très compliqué,j'ai créé un thread qui écoute un portaprès je pèse sur un bouton qui fait connectédonc il créé un socket le connect au port en listbox [ par abdoulax ] Je crée 2 namespace différent . le premier sert de noyau au programme et le deuxième d'interface graphique. le problème c'est que je ve afficher des i Problème de thread [ par oualla_mohamed ] A partir d'un WinForm je lance un thread qui accède a un contôle de la WinForm.Le souci c'est qu'en je lance l'execution du programme à partir de Visu Problème de Form [ par emmanuel9 ] Bonjour à tous, En faite je voudrais faire apparaitre une Form par dessus une autre pendant 3 seconde. Donc dans l'évenvement Load je fais Thread.sl Problème de thread (encore) [ par Bidou ] En fait, je dois charger des données dans un Listview, et ca peut prendre du temps.Donc pendant le temps de chargement et d'affichage, j'affiche une f Thread et menu contextuel [ par seblx ] Bonjour à tous,J'ai une form qui enregistre un menu contextuel (Shell) et qui lance un thread supplémentaire. Mon menu rajoute une action "Stop" sur c Transparence d'une fenetre via une autre. [ par bigflo93 ] Bonjour,Je cherche de l'aide sur la transparence d'un Form via un autre Form.J'ai un Form avec un menu Option dans le mainMenu.Lorsque je clique dessu ouvrir une form enfant dans un thread différent [ par bossun ] salut,Dans une appli MDI, ne veux ouvrir mes feilles enfants dans un thread différent à chaque fois. donc je voudrais utiliser le backgroudnworker pou thread d'un form [ par trdev ] bonjourje commence à regarder les threads et j'ai des questions :si j'ai bien compris chaque formulaire est un thread particulier ... ou je me trompe. Appel d'une form à partir d'une DLL [ par mathsfin ] Bonjour,J'essaye d'appeller une form packagée dans une DLL (projet de classe .Net) et de l'intégrer dans une form d'un autre projet(Windows Applicatio


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales