Backgroundworker Dowork

Résolu
zaynoubagl Messages postés 58 Date d'inscription mercredi 11 septembre 2013 Statut Membre Dernière intervention 19 octobre 2014 - 29 sept. 2014 à 14:59
zaynoubagl Messages postés 58 Date d'inscription mercredi 11 septembre 2013 Statut Membre Dernière intervention 19 octobre 2014 - 30 sept. 2014 à 16:24
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
A voir également:

4 réponses

jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
29 sept. 2014 à 15:02
Bonjour,

Je n'ai pas vraiment compris ta question...
Déjà.. sur quelle partie EXACTEMENT de ton code rencontres tu un souci ?


0
zaynoubagl Messages postés 58 Date d'inscription mercredi 11 septembre 2013 Statut Membre Dernière intervention 19 octobre 2014
29 sept. 2014 à 15:16
mon application fonctionne comme ca :
dams le laod de mon application
connect a ma base de donnée access
selectionner tous les adress ip dans ma table equipemment
a chaque selection d'une adress ip creer :
une liste dynamique des socket
une liste dynamique des IPendpoint
une liste dynamique d'un background worker

ajouter() pour la liste des socket
ajouter1() pour la liste des ipendpoint
ajouter2() pour la liste de bkw

les listes sont creer automatiquemment fonctionne bien
le problemme dans l'evennement dowork de chaque backgroundworker

je voulais quant je lance mon timer chaque backgroundworker do work execute sur sk(i) precise
bw(1).dowork sur sk(1)
0
zaynoubagl Messages postés 58 Date d'inscription mercredi 11 septembre 2013 Statut Membre Dernière intervention 19 octobre 2014
29 sept. 2014 à 15:19
le problemme ici


Private Sub DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)

Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)


'le i c'est mon problemme

' 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

0
zaynoubagl Messages postés 58 Date d'inscription mercredi 11 septembre 2013 Statut Membre Dernière intervention 19 octobre 2014
29 sept. 2014 à 15:20
il prenne toujour le i=0
je voulais a chaque fois prendre le i precesise
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
29 sept. 2014 à 15:23
Tu as des paramètres (sender et e ) dans ta SUB
Private Sub DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)

Qu'est qu'ils valent lorsque tu entres dans ta SUB ?
0
zaynoubagl Messages postés 58 Date d'inscription mercredi 11 septembre 2013 Statut Membre Dernière intervention 19 octobre 2014
29 sept. 2014 à 15:29
je voulais envoyer mon trame pour chaque socket connected
dans ma liste des socket sk()
0
Salut,

La condition de ta boucle For Next
For i = 0 To sk.Count - 1 And ippoint.Count - 1
n'est pas correcte.
Si tu regardes msdn a propos de l'opérateur AND http://msdn.microsoft.com/en-us/library/sdbcfyzh.aspx tu t'apercevras que ta boucle ne s'exécutera qu'une fois puisque la valeur maximale obtenue avec l'opérateur AND est 1.

@jordane45
Peux tu me dire comment on indique un lien (url) lorsqu'on a pas de compte membre. Merci d'avance.
0
Ne pas tenir compte de ce message car ce n'est valable que lorsque l'expression est entre parenthèses. Veuillez excuser mon intrusion.
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
Modifié par jordane45 le 30/09/2014 à 14:32
Banana, pour mettre un LIEN il suffit d'utiliser les "[" "]"

[URL_DU_LIEN Nom_du_lien ]
Par exemple :
[http ://www.google.fr Google est mon ami ^^ ]
Google est mon ami ^^
0
zaynoubagl Messages postés 58 Date d'inscription mercredi 11 septembre 2013 Statut Membre Dernière intervention 19 octobre 2014
30 sept. 2014 à 16:24
j'ai trouver la solution
donner un parametre pour mon background worker
et creer un argument dans l'evennemment do work
0
Rejoignez-nous