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 .......
Voici l'appel :
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 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 :
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...
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 <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
Merci d'avance !
Partager