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.
Delai1.Text c'est le TextBox où apparaitra la valeur du délai.
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
notez que BeginReadSingleSampleDouble et EndReadSingleSampleDouble sont équivalent à beginInvoke et EndInvoke.
Qu'est ce qui fait que c'est lent ?
Merci
Partager