Bonjour,
J'essaye de lire des données provenant de mon hardware et de les afficher dans un label, le tout dans un timer.
J'utilise System.Timers.Timer pour cela :
Problème :
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
18
19
20
21
22 public partial class Form1 : Form { delegate void delegateDisplay(); delegateDisplay dlgLbl; public Form1() { InitializeComponent(); dlgLbl = new delegateDisplay(this.RefreshInfos); } private void RefreshInfos() { // récupère ici les infos du harware // cela prend environ 2,5 sec // ensuite j'affiche le résultat dans un label : label1.Text = myHardware.DriverInfo.ToString() // exemple } private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { label1.Invoke(dlgLbl); } }
Le temps de récupérer les infos du hardware prend environ 2,5 sec.
Pendant ce temps, la fenêtre où j'affiche mon label freeze, ne répond pas, puisqu'elle communique avec le hardware pour récupérer les infos.
Pourtant je croyais qu'en utilisant Invoke je passais par un thread et ça m'éviterait ce genre de problème d'attente ?
Donc, comment pourrais-je modifier mon code pour que la fenêtre ne freeze pas ?
Merci.
Partager