[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les forums
> Programmation
> Autres langages
> [C#] thread agissant sur un form
> Lecture du sujet
[C#] thread agissant sur un form
Vous devez être inscrit pour pouvoir poster des messages
Le problème de ce sujet a été résolu
|
Page :
1
|
| Auteur |
Message |
|
1 visiteur sur ce sujet (1 anonyme)
|
|
Page :
1
|
Groupe : Membres
|
Bonjour à tous,
j'ai un petit problème
Je souhaite qu'un form soit actualisé après x seconde par une thread. Alors j'ai fais des tests avant de faire cela mais j'ai un problème que je ne comprends pas trop. Je me suis inspiré de msdn pour faire ceci.
Code : C# 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
31
32
33
34
35 | public partial class Stats : Form
{
private Thread demoThread = null;
public Stats()
{
InitializeComponent();
}
public void setLabel1(string tmp)
{
label1.Text = tmp;
}
private void label1_Click(object sender, EventArgs e)
{
}
private void ThreadTest()
{
label1.Text = "test";
}
private void Stats_Load(object sender, EventArgs e)
{
demoThread = new Thread(new ThreadStart(this.ThreadTest));
this.demoThread.Start();
}
}
|
Mais quand je lance ce form j'obtiens une erreur me disant : " Opération inter-threads non valide : le contrôle 'label1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé."
Je ne vois pas comment régler cela. Si quelqu'un aurait une idée.
C'est peut être une connerie mais bon.
Merci d'avance
|
Groupe : Membres
|
Dans .Net il ne faut pas toucher depuis un autre thread que son createur (cf appartment Com) donc fait ceci :
Code : C# 1
2
3
4
5
6
7
8
9
10
11 | private void ThreadTest()
{
if (this.InvokeRequired)
this.Invoke(new MethodInvoker(
delegate
{
label1.Text = "test";
}));
else
label1.Text = "test";
}
|
En gros, on test si on est sur le thread createur de la form (invokeRequired), si non, on passe une fonction au thread createur (ici anonyme) par un délégué, si oui, on modifie simplement le label.
|
Groupe : Membres
|
Ah ok. J'ai fait comme ça en java donc je me disais ça devrait marcher.
Mais j'ai fait comme tu m'as dis et ça marche super maintenant.
C'est pas la première fois que tu m'aides
Merci bien pour cette aide précieuse
|
Retour au forum "Autres langages" ou à la liste des forums
Vous devez être inscrit pour pouvoir poster des messages