surfzoid
Messages postés463Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention21 avril 2010
-
4 juil. 2006 à 09:56
surfzoid
Messages postés463Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention21 avril 2010
-
5 juil. 2006 à 18:00
Bonjour
j'essaye d'utilisé le composant backgroundWorker qui me semble le plus adapté, seulement voila j'ai quelque soucis.
Je vais essayer de décrire briefement le schéma, j'ai ecrit une ocx/dll qui me sert de composant VS2005 dans un autre projet sur la form principal, je l'y appel 4 fois (ce sont 4 cuves avec niveau et température), jusque ici tout vas bien les 4 cuves issues de l'ocx sont bient chacunes avec leur et leurs parametres personnalissé que je leurs et associé depuis mon projet, ensuite et c'est la qu'intervien le backgroundWorker j'essaye d'ecrire une function qui tourne en boucle et qui rafraichit les valeurs de niveau et temperature dans mes cuves et donc j'ai utiliser depuis un module un backgroundWorker (definit et utiliser par le code) qui a pour tache asynchrone de faire une requete de lecture de variable dans un automate programmable et ensuite appel une autre fonction qui vas rafraichir les valeurs des cuves en utilisant la collection de controls de la feuille principale et la methode for each ctrl, seulement quand j' arrive au ctrl qui est la cuve et que je regarde en dynamique les propriété de ce dernier j'ai les valeurs par défaut des parametre de l'ocx a la place de celle que j'ai renseigner depuis l'editeur de proprieté, si je deplace tout ce code du module vers la feuille principale j'ai bien les propriété que j'ai definit mais je me retrouve avec des erreure interthreads issue du code de l'ocx je pense...
Le code du module :
Module requetes
Dim reqplusun As Boolean
Dim Com_Modbus1 As New Com_Modbus_ADI.Com_Modbus
Private WithEvents backgroundWorker1 As New System.ComponentModel.BackgroundWorker
#Region "Requettes de communication"
Public Sub vasy()
backgroundWorker1.WorkerSupportsCancellation = True
backgroundWorker1.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_DoWork( _
ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) _
Handles backgroundWorker1.DoWork
While backgroundWorker1.CancellationPending = False
Dim i As Integer
For i = 0 To Principale.ToolStripComboBoxAPI.Items.Count - 1
If selAPi = i Then
Dim valanim As [Byte]()
valanim = Com_Modbus1.lire100mot(0, 50)
While Com_Modbus1.set_reqencours = True
End While
If valanim Is Nothing = False Then animation(Principale.Panel1, valanim)
End If
Next
End While
End Sub
Public Sub rafraichit()
backgroundWorker1.CancelAsync()
End Sub
Delegate Sub SetobjectCallback(ByVal [idobject] As Control, ByVal valeur As [Byte]())
Public Sub animation(ByVal container As Control, ByVal valeur As [Byte]())
Dim ctrl As Control
For Each ctrl In Principale.Panel1.Controls 'container.Controls
Dim obj As Object
obj = ctrl
'If ctrl.InvokeRequired Then
Dim d As New SetobjectCallback(AddressOf animation)
'Principale.Invoke(d, New Object() {[obj]})
If TypeOf (ctrl) Is Panel = False Then
My.Application.DoEvents()
If TypeOf (ctrl) Is Pompe.Gest_pompes Or TypeOf (ctrl) Is Vanne.Gest_vannes Then
End If
If TypeOf (ctrl) Is Cuves.cuveControl1 Then
Console.WriteLine(ctrl.Name)
Dim motMW As Int64
Dim octetLow As Byte = obj.set_niveauMW + 9
Dim octetHigh As Byte = obj.set_niveauMW + 10
motMW = (octetLow * 256) + octetHigh
'Gestion du signe - (signed)
If motMW > 32767 Then motMW = motMW - 65536
obj.val_niveau(motMW)
troxsa
Messages postés553Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention 2 octobre 20161 5 juil. 2006 à 11:55
Bonjour,
Quel est l'erreur ?
Une simple description de ton probleme aurait suffit, car là ça décourage de tout lire (avec le code)
si tu as un probleme avec le BackGroundWorker il y a de tres bon exemple sur le site de microsoft fait par Ecric Vernier (en format video) il explique vraiment bien tout ce qu'il faut
surfzoid
Messages postés463Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention21 avril 2010 5 juil. 2006 à 18:00
L'erreur c'est que si au lieu d'utiliser l'interface graphique pour ajout un backgroundWorker je passe par le code uniquement et ce dans un module je n'accede pas au valeur des propriétés personaliser que j ai ecrit dans mon OCX