Bonjour, mon probleme comment le backgroundworker dowork exucuter le code sur le i precise
Imports System.Net.Sockets
Imports System.Net
Imports System.Threading
Imports System.IO
Imports System.Net.NetworkInformation
Imports System.ComponentModel
Imports System.Data.OleDb
Imports System.Diagnostics
Imports System.Object
Imports System.Windows
Public Class Form1
Private nblist As Integer
Dim bKW() As BackgroundWorker
Dim _ping As New Ping
Dim ligne As String
Dim ippoint() As IPEndPoint
Dim lvi As ListViewItem
Dim Conn, sql As String
Dim Cnx As OleDbConnection
Dim Cmd As OleDbCommand
Dim Dta As OleDbDataAdapter
Dim Dts As New DataSet
Dim Dtt As DataTable
Dim Rownum As Integer
Dim Dtr As DataRow
Dim Cmdb As OleDbCommandBuilder
Dim myIPAddress As System.Net.IPAddress
Dim p As Integer = 1314
Dim sk() As Socket
Dim pcourant As Integer
Delegate Sub dEcrit(ByVal Texte As String)
Private Sub Ecrit(ByVal Texte As String)
Me.ListBox1.Items.Add(Texte)
End Sub
Sub EcritureMessage(ByVal Message As String, Optional ByVal Type As Integer = 0)
Dim Texte As String = ""
Select Case Type
Case 1
Texte &= "INFO : "
Case 2
Texte &= "ERREUR : "
Case Else
End Select
Texte &= Message
Try
Me.Invoke(New dEcrit(AddressOf Ecrit), Texte)
Catch ex As Exception
Exit Sub
End Try
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Timer1.Enabled = True
Timer1.Start()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
connex()
End Sub
Sub ajouter2()
If bKW IsNot Nothing Then
For i = 0 To bKW.Count - 1
bKW(i) = New BackgroundWorker()
bKW(i).WorkerReportsProgress = True
bKW(i).WorkerSupportsCancellation = True
AddHandler bKW(i).DoWork, AddressOf DoWork
AddHandler bKW(i).ProgressChanged, AddressOf WorkerProgressChanged
AddHandler bKW(i).RunWorkerCompleted, AddressOf WorkerCompleted
bKW(i).RunWorkerAsync(i)
Next
End If
End Sub
Private Sub DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
For i = 0 To sk.Count - 1 And ippoint.Count - 1
If sk(i).Connected Then
Dim Mess As Byte() = System.Text.Encoding.UTF8.GetBytes("@00R12*")
Dim Envoi As Integer = sk(i).Send(Mess)
Dim Bytes(255) As Byte
Dim Recu As Integer
Try
Recu = sk(i).Receive(Bytes)
Catch ex As Exception 'Erreur si fermeture du socket pendant la réception
'EcritureMessage("Deconnecté sur serveur.", 1)
End Try
Dim Message As String
Message = System.Text.Encoding.UTF8.GetString(Bytes)
Message = Message.Substring(0, Recu) + "" + ippoint(i).Address.ToString
EcritureMessage(Message)
Else
If Not sk(i).Connected Then
If _ping.Send(ippoint(i).Address.ToString).Status = IPStatus.Success Then
sk(i) = New System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
sk(i).Connect(ippoint(i))
EcritureMessage("Connexion reussite avec la carte!" + ippoint(i).Address.ToString, 1)
Else
EcritureMessage("Connexion non reussite avec la carte " + ippoint(i).Address.ToString, 2)
End If
System.Threading.Thread.Sleep(200)
End If
End If
Next
End Sub
Private Sub WorkerProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs)
' I did something!
End Sub
Private Sub WorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs)
' I'm done!
End Sub
Sub ajouter()
If ippoint Is Nothing Then
For i = 0 To ippoint.Count - 1
ippoint(i) = New IPEndPoint(IPAddress.Parse(ligne), p)
Next
End If
End Sub
Sub ajouter1()
If sk Is Nothing Then
For i = 0 To sk.Count - 1
sk(i) = New System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Next
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Call ajouter2()
End Sub
Sub connex()
For i = 0 To sk.Count - 1 And ippoint.Count - 1
If _ping.Send(ippoint(i).Address.ToString).Status = IPStatus.Success Then
sk(i).Connect(ippoint(i))
EcritureMessage("Connexion reussite avec la carte!" + ippoint(i).Address.ToString, 1)
Else
EcritureMessage("Connexion non reussite avec la carte " + ippoint(i).Address.ToString, 2)
End If
Next
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dr As OleDb.OleDbDataReader
Conn = "provider = microsoft.jet.oledb.4.0 ; data source =" & "C:\BDD.mdb"
Cnx = New OleDbConnection
Cnx.ConnectionString = Conn
Cnx.Open()
sql = "select Table_Equipements.Adr_IP from Table_Equipements"
Cmd = New OleDbCommand(sql)
Dta = New OleDbDataAdapter(Cmd)
Cmd.Connection() = Cnx
dr = Cmd.ExecuteReader
Dim ligne As String
While dr.Read()
' exploitation ligne courante
ligne = ""
For i = 0 To dr.FieldCount - 1
ligne += dr(i).ToString
If ippoint Is Nothing Then
ReDim ippoint(0)
Else
ReDim Preserve ippoint(ippoint.Count)
End If
If sk Is Nothing Then
ReDim sk(0)
Else
ReDim Preserve sk(sk.Count)
End If
If bKW Is Nothing Then
ReDim bKW(0)
Else
ReDim Preserve bKW(bKW.Count)
End If
ippoint(ippoint.Count - 1) = New IPEndPoint(IPAddress.Parse(ligne), p)
sk(sk.Count - 1) = New System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
bKW(bKW.Count - 1) = New BackgroundWorker()
ajouter()
ajouter1()
ajouter2()
Next i
End While
dr.Close()
End Sub
End Class
mon probleme que le backgroundworker parcour tout la liste a chaque fois
comment chaque backroundworker i dowork run sur sk(i)
si le i=1 run sk(1)
j'ai besoin d'un aide