[Mono] Problème de delegate
Bonjour à tous,
J'ai un soucis avec mon interface graphique (Gtk#) et un thread qui doit mettre à jour des labels.
Pour simplifier : j'ai un thread qui se charge de gérer une liaison série lorsque que l'utilisateur appuie sur un Gtk.Buton, ainsi que de mettre à jour un label pour renseigner l'état de la liaison série.
Voici mon code (version simplifié):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
t = new System.Threading.Thread(new ThreadStart(thread_Process));
private void Buton_Clik(object sender, System.EventArgs e)
{
t.Start();
}
private void thread_Process()
{
OpenSerialPort();
Gtk.Application.Invoke(delegate
{
myLabel.Text = "Port série ouvert";
});
string[] rxdata = new string[];
rxdata = ReadData();
Gtk.Application.Invoke(delegate
{
myLabel.Text = "Data lues";
labelVal1.Text = rxdata[0];
labelVal2.Text = rxdata[1];
});
CloseSerialPort();
Gtk.Application.Invoke(delegate
{
myLabel.Text = "Port série fermé";
});
} |
Le problème est que les labels ne se mettent pas à jour tout le temps.
De plus l'éxécution du code est assez bizard : le port série est fermé avant même que les labels LabelVal1 et LabelVal2 soient mis à jour (je croyais être en synchrone avec Invoke()!). Et le temps de mise à jour de ces Labels (quand ils sont mis à jour bien sur!!!!! :aie:) est trés long!
Je ne comprends pas pourquoi...
J'ai pourtant repris l'exemple de la mono doc
Merci d'avance