Bonjour, je reviens sur un problème que j'ai eu dans un autre post sur les threads et delegates, parce que la ça devient l'enfer, pas une methode qui marche correctement. J'ai absolument besoin d'une application qui soit rapide sans un seul gèle d'écran. Voila j'utilise des délégués pour afficher dans des TextBox des mesures de délais entre signaux faits par une carte d'aquisition pci (NiDaqmx). J'en ai 8 à faire en tout. 2 se font en même temps puis 2-3 secondes plus tard 2 autres etc... Mais voilà au bout d'un moment ça rame et ça influe sur le bon fonctionnement du reste. J'ai testé mon appli seulement avec les délais et c'est bien ça qui fait ramer le tout.

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
myTask1 = New Task
'Premiere mesure de  délai, il y a 8 fonctions comme ça en tout et ça tourne dans un timer
pour rafraichir en permanence les nouvelles valeurs dans les textbox
myTask1.CIChannels.CreateTwoEdgeSeparationChannel("Dev2/ctr0", "", min, _
max, CITwoEdgeSeparationFirstEdge.Rising, CITwoEdgeSeparationSecondEdge.Rising, _
 CITwoEdgeSeparationUnits.Seconds)
myCallBack1 = New AsyncCallback(AddressOf CounterInCallback1)
counterInReader1 = New CounterReader(myTask1.Stream)
counterInReader1.BeginReadSingleSampleDouble(myCallBack1, Nothing)
 
Et là je récupère la valeur du délai.
PrivateSub CounterInCallback1(ByVal ar1 As IAsyncResult)
measureDelai1 = counterInReader1.EndReadSingleSampleDouble(ar1)
Delai1.Text = measureDelai1.ToString()
EndSub
Delai1.Text c'est le TextBox où apparaitra la valeur du délai.
notez que BeginReadSingleSampleDouble et EndReadSingleSampleDouble sont équivalent à beginInvoke et EndInvoke.
Qu'est ce qui fait que c'est lent ?
Merci