Blocage du a l'attente de donnée

Résolu
dikan Messages postés 1 Date d'inscription mercredi 9 mai 2012 Statut Membre Dernière intervention 9 mai 2012 - 9 mai 2012 à 15:51
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 25 mai 2012 à 20:32
Bonjour,
nous sommes étudiant en électronique médicale. Dans le cadre d'un projet en windows forms sous visual studio, nous devons réaliser l'interconnexion entre un pc et un module se chargeant d'envoi de données. les données sont en hexadécimal et envoyé sur un port déterminé de notre pc( port et IP prédétermine)
ce code hexadécimal arrive aux alentours de toutes les 3 secondes, doit être traduit en ASCII et ne doit pas bloquer notre programme dans son déroulement.

Explication :

notre Programme est sans cesse à l'écoute du port, nous voudrions qu'il n'aille chercher les infos que lorsqu'elles arrivent sur le port et ainsi pouvoir utiliser le temps libre pour traiter des données ou faire autre chose

voici notre code:

Imports System.Net.Sockets
Imports System.Net
Imports System.Text

Public Class Form1
Dim a As String = ""
Dim b As String = ""

Public WithEvents s As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Public WithEvents ipAdressServer As IPAddress = IPAddress.Parse(Dns.GetHostAddresses(Dns.GetHostName())(0).ToString)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Visible = True
Timer1.Interval = 3000
Timer1.Start()

s.Bind(New IPEndPoint(ipAdressServer, 65501))
s.Listen(1)
Dim s2 As Socket = s.Accept()
Dim ret As Integer
Dim rbuf(256) As Byte
Dim chaine As New System.Text.StringBuilder

While (1)

ret = s2.Receive(rbuf, 0, 256, SocketFlags.None)
chaine.Append(System.Text.Encoding.ASCII.GetString(rbuf, 0, ret))
TextBox1.AppendText(System.Text.Encoding.ASCII.GetString(rbuf, 0, ret) + "" + b)
a = (System.Text.Encoding.ASCII.GetString(rbuf, 0, ret))
b = Len(a)

End While

End Sub

Private Sub Timer1_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'TextBox1.AppendText(a & vbCrLf & b)
'b = TextBox1.Text
End Sub
End Class

Devrions nous utiliser un équivalent a dataarrival ou autre technique si possible exemple concret et détaille pour les pauvres newbie que nous sommes

Merci d'avance

1 réponse

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
25 mai 2012 à 20:32
Bonjour,

Regardes du coté des Threads et du BackGroundWorker.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
3
Rejoignez-nous