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 Presentation Foundation Discussion :

Thread Bloquant & TcpClient


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Thread Bloquant & TcpClient
    Bonjour à tous, voilà j'ai un soucis avec un client réseau que j'ai développé en WPF avec des TCPClient classiques.

    Je créée un thread pour effectuer ma connexion à l'application (service windows) sur le serveur distant, pour éviter de bloquer mon application en cas d'échec. La connexion marche sans soucis quand le service distant tourne, mais dans le cas contraire, l'application est bloquée malgré le thread et je ne vois pas pourquoi.

    PS: NetworkClient est une classe que j'ai créer encapsulant diverses étapes des TcpClient.

    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
     
    Class Window1
     
        Dim tcp As New NetworkClient
     
        Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            Dim thr As New Threading.Thread(AddressOf sTest)
            thr.Start()
        End Sub
     
        Delegate Function Test() As Boolean
        Sub sTest()
            Dispatcher.Invoke(New Test(AddressOf Init))
        End Sub
     
        Function Init() As Boolean
            If tcp.Connect("serveur_distant", 7777) Then
                lblRes.Foreground = Brushes.Green
                lblRes.Content = "Connexion au serveur établie."
                tcp.Disconnect()
            Else
                lblRes.Foreground = Brushes.Red
                lblRes.Content = "Connexion au serveur impossible."
            End If
            Return True
        End Function
     
        Private Sub Window1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles Me.MouseMove
            If Mouse.LeftButton = MouseButtonState.Pressed Then
                DragMove()
            End If
        End Sub
    Merci pour vos conseils.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    si je me rappel bien il faut préciser les timeout sur les socket sinon ca peut rester bloqué ...

    regarde de ce coté la ....
    dans tous les cas faut mettre le thread en isbackgroud = true;
    maintenant c'est plus un probleme c#/.net que wpf

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Essaye plutôt un truc comme :
    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
    35
    36
    37
    38
    39
    Class Window1
     
        Dim tcp As New NetworkClient
     
        Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            Dim thr As New Threading.Thread(AddressOf sTest)
            thr.Start()
        End Sub
     
        Delegate Function Test() As Boolean
        Sub sTest()
            Init()
        End Sub
     
        Sub OK()
            lblRes.Foreground = Brushes.Green
    	lblRes.Content = "Connexion au serveur établie."
        End Sub
     
        Sub KO()
            lblRes.Foreground = Brushes.Red
    	lblRes.Content = "Connexion au serveur impossible."
        End Sub
     
        Function Init() As Boolean
            If tcp.Connect("serveur_distant", 7777) Then
    	    Dispatcher.Invoke(New Test(AddressOf OK))
                tcp.Disconnect()
            Else
    	    Dispatcher.Invoke(New Test(AddressOf KO))
            End If
            Return True
        End Function
     
        Private Sub Window1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles Me.MouseMove
            If Mouse.LeftButton = MouseButtonState.Pressed Then
                DragMove()
            End If
        End Sub
    PS : je ne connais pas VB donc le code compilera sans doute pas mais le principe est là.

  4. #4
    Invité
    Invité(e)
    Par défaut Ca roule
    Merci, c'est bien ça, c'est logique d'un coté quand on y pense je connais pas parfaitement le fonctionnement des threads mais en appelant la méthode Invoke je devais sortir du thread que j'avais créé.

    En tout cas merci

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

Discussions similaires

  1. [MFC] Thread bloquant et sockets
    Par wogkiller dans le forum Threads & Processus
    Réponses: 8
    Dernier message: 09/06/2008, 15h37
  2. Thread bloquant, pourquoi ?
    Par ILoveCSharp dans le forum C#
    Réponses: 5
    Dernier message: 16/06/2007, 22h11
  3. Synchronize bloquant dans un thread
    Par bencot dans le forum Langage
    Réponses: 3
    Dernier message: 20/08/2004, 16h42
  4. [Threads] Sortir d'une fonction bloquante
    Par guejo dans le forum MFC
    Réponses: 19
    Dernier message: 17/08/2004, 14h12
  5. [API] Communication série NON-bloquante : OVERLAPPED/Thread
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/11/2003, 13h43

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