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 Forms Discussion :

Problème Thread et Formulaire


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Par défaut Problème Thread et Formulaire
    Bonjour,

    J'ai un projet de messagerie instantanée à créer en .Net.
    J'ai donc créer une classe Serveur (qui est un thread lancé au load de mon formulaire principale) qui écoute via une socket sur un port. Dés qu'un client se connecte sur le socket, je veux créer un formulaire "chat" et l'afficher.
    Cependant, cela ne marche pas. Le formulaire "chat" s'affiche mais il reste indéfiniment grisé.
    J'ai l'impression que faire .Show() sur un formulaire dans un thread pause un problème, mais je ne comprends pas pourquoi.

    Appel du thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Serveur = New ClasseServeur(CInt(tb_port.Text))
            caller = New Threading.Thread(New Threading.ThreadStart(AddressOf Serveur.run))
            caller.Start()
        End Sub
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Imports System.Collections.Generic
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Text
    Imports System.IO
    Imports System.Threading
    Public Class ClasseServeur
        Private ep As EndPoint
     
        Public Sub New(ByVal port As Integer)
            ep = New IPEndPoint(IPAddress.Any, port)
        End Sub
     
        Public Sub run()
            'Dim caller As Threading.Thread
            Dim socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            socket.Bind(ep)
            socket.Listen(100)
            While True
                Dim clientSocket As Socket = socket.Accept()
                MessageBox.Show(String.Format("New client at {0}", DirectCast(clientSocket.LocalEndPoint, IPEndPoint).Address.ToString()))
                Dim chat As New Chat(clientSocket)
                chat.Show()
                'Dim thread As New ClasseThread(clientSocket, chat)
                ''chat.Invoke(New NomDeMonDelegue(AddressOf chat.rtb_convers.AppendText), "texte")
                'caller = New Threading.Thread(New Threading.ThreadStart(AddressOf thread.run))
                'caller.Start()
            End While
        End Sub
     
     
     
    End Class

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    en debug pas à pas, ca bloque aussi sur cette ligne ?


    sinon y a juste un truc qui me chiffone parce que j'ai pas l'habitude de voir des addressof sur une instance
    donc essaye à tout hasard de faire juste à tout hasard Serveur = New ClasseServeur(CInt(tb_port.Text))

    et dans le new de ta classe, démarrer le nouveau thread et le starter

    sauf si t'es sur que ca peut aller comme t'as mis


    après y a l'histoire qu'un thread ne peut pas avoir accès à des controles créés par un autre thread, mais là c'est bien ton thread qui instancie la fenetre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Par défaut
    J'ai essayé de démarrer mon thread comme tu me l'as dit, cela me fait toujours pareil.

    Je vous montre une capture d'écran de la fenêtre qui pose un problème coté serveur :

    http://img145.imageshack.us/img145/1203/demochatjg2.jpg

    Voila la fenêtre coté client qui s'ouvre correctement(elle ne s'ouvre pas dans un thread celle la) :

    http://img356.imageshack.us/img356/9...bonchatgh3.jpg

    Ma machine virtuelle qui sert de cliente est en Windows XP mais si elle fait serveur le meme problème persiste donc ce n'est pas un problème sur Vista.

    Pour finir, le traitement ne s'arrête pas sur "Chat.Show()", la boucle while continue a tourner et si un nouveau client se connecte, une deuxième fenêtre "chat" s'ouvre mais toujours avec le même problème.

    Donc si vous savez comment régler cela ou même si vous savez comment je peux faire du multiclient d'une façon différente au niveau programmation, je suis preneur.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    fait un délégué qui instancie la fenetre
    et appelle ce délégué sur me depuis ton thread
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    J'ai essayé ce que tu m'as dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim chat As New Chat
                        Dim m As New NomDeMonDelegue(AddressOf chat.Show)
                        m.Invoke()
    Mais le problème reste entier. J'ai cherché sur des forums anglais j'ai vu des personnes qui avaient le même problème que moi. C'est a dire impossible de créer une nouvelle instance d'un form dans un thread a part !!

    De plus, j'ai cherché des sources correspondant à ce que je cherche mais je n'ai rien trouvé !!

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    ce n'est pas ce que j'ai dit, j'ai dit de faire le new dans le thread principal, et non dans le thread secondaire (pas seulement le show sur le principal)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [MySQL] les apostrophe me cause un problème dans un formulaire
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/10/2005, 20h28
  2. Problème: condition sur formulaire dans requête
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2005, 23h27
  3. Problème d'accès formulaire de contact
    Par Mystic26 dans le forum Langage
    Réponses: 7
    Dernier message: 16/09/2005, 16h47
  4. problème déplacement entre formulaire
    Par estancha dans le forum IHM
    Réponses: 6
    Dernier message: 07/10/2004, 15h22
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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