Tchat vb.NET application WPF | un Thread qui me mène la vie dure
Bonjour,
J'essaye de mettre en place un tchat en vb.net dans une application WPF.
J'utilise Remoting et le protocole TCP.
Mon serveur marche et les appels de fonction entre le client et le serveur marche aussi.
Seulement quand je fais ma fonction PoollServer afin de faire un tchat, je l’exécute dans un thread et lors de l’exécution quand il sort du sleep()
J'ai une belle pop up impossible d’exécuter le thread car il n'est pas prioritaire à un autre .......:cry:
Voici l'appel :
Code:
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
| Private Sub PollServer()
Dim _True As Boolean = True
Do
Try
Thread.Sleep(50000)
Dim clients As ArrayList = Operation.getClients()
List.Items.Clear()
For Each clientName As String In clients
List.Items.Add(clients)
Next
Dim sessionText As String = Operation.getChatSession()
TchatBox.Clear()
TchatBox.Text = sessionText
Catch ex As Exception
MessageBox.Show("Probleme de connection avec le serveur : " + ex.Message)
End Try
Loop While _True
End Sub
Private Sub ButtonSend_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles ButtonSend.Click
thrd = New Thread(AddressOf PollServer)
thrd.SetApartmentState(ApartmentState.STA)
thrd.IsBackground = True
thrd.Start()
Operation.AddText(Name + ":\n" + TextSend.Text + "\n\n")
TextSend.Clear()
End Sub |
appel du server :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <STAThread()> _
Public Shared Sub Main(ByVal args() As String)
Try
' Création d'un nouveau canal d'écoute sur le port 1069
Dim op As New Operation()
Dim channel As TcpChannel = New TcpChannel(1069)
' Enregistrement du canal
ChannelServices.RegisterChannel(channel, True)
' Démarrage de l'écoute en exposant l'objet en Singleton sinon il y a SingleCall
'mais c'est mieux Singleton d'après ce que j'ai compris (surtout pour les clients qui utilise le meme objet)
RemotingConfiguration.RegisterWellKnownServiceType(GetType(Operation), _
"Operation", WellKnownObjectMode.Singleton)
Console.WriteLine("Le serveur a démarré avec succés")
Console.ReadLine()
TrackingServices.RegisterTrackingHandler(New TrackingServices())
Catch
Console.WriteLine("Erreur lors du démarrage du serveur")
Console.ReadLine()
End Try
End Sub |
Si quelqu'un pourrait m'aider car j'ai pas trouver la réponse sur le net ... J'ai essayer de comprendre les Dispatcher.Invoke et backgroundWorker sans succès et je me dis que ça doit être simple pourtant avec le Framework 4...
Merci d'avance !