Bonjour,
je travaille sur un programme de type Winform, avec le framework 3.5.
J'ai donc une form principale, avec des boutons et tout un tas de choses.
Ensuite, j'ai un thread independant qui recolte des informations (bdd et reseau).
Et je voudrais que ce thread puisse manipuler l'apparence de ma form principale.
Prenons un exemple concret (en vrai ce n'est pas comme cela, mais c'est un exemple minimal pour montrer le probleme):
la form possede un bouton: button1. Lorsqu'on clique sur ce bouton, ca va lancer le thread. Et lorsque le thread demarre, la premiere chose qu'il fait c'est de chacher (hide) ce bouton.
Pour ce faire, j'ai essaye le code suivant:
Le probleme, c'est que le programme crashe sans aucun message d'erreur, sans passer par aucun catch, lors de l'appel a button1.Hide(); alors que button1 est ok (pas null et ses champs sont ok).
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36 //mainform.cs public partial class MainForm : Form { // le code de la main form private void button1_Click(object sender, EventArgs e) { ExecuteThread ct = new ExecuteThread(this); Thread oThread = new Thread(new ThreadStart(ct.Execute)); oThread.Start(); } internal void HideButton1() { button1.Hide(); } } // le code du thread: internal class ExecuteThread { private MainForm main_form; internal bool ended; internal ExecuteThread(MainForm mainform) { ended = false; main_form = mainform; } internal void Execute() { main_form.HideButton1(); // ... } }
Savez-vous ou est le probleme?
ps: pardon pour les accents, mais je suis sur un clavier italien avec un os en anglais.
Partager