Bonjour,
Je recherche les meilleures pratiques sur la question du multi-thread avec form.
J'ai déjà lu plei nde tuto, mais ils traitent toujours de cas simples, tout dans la même classe, etc.
j'ai une classe qui va se charger de tâches en background qui ne sera pas Form1.
je cherche a mettre en place le systeme le plus propre possible pour depuis cette classe appeller une methode de Form1 (en "delegate")
exemple,
soit la classe Form1 :
et ma classe background :
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 { background worker; public Form1() { InitializeComponent(); worker = new background(); } private void button1_Click(object sender, EventArgs e) { worker.setup(par1.Text, par2.Text); // prépare les element pour le thread // lance le nouveau thread. Thread thread = new Thread(new ThreadStart(worker.start)); thread.IsBackground=true; thread.Start(); } public void display(string info) // met à jour l'UI { Label1.Text=info; }
Voilà, mon probleme est "par quoi je remplace XXXX ?"
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 public class background { public readonly object verrou = new object(); delegate void strParamDelegate(string info); private string p1, p2; // parametres pour le thread worker. public void setup(string par1, string par2) // appel unique (avant de lancer le thread) { p1 = par1; p2 = par2; } public void start() // thread "worker" { updateui(""); //par exemple Thread.Sleep(1000); } // met à jour l'interface utilisateur private void updateui(string info) { BeginInvoke(new strParamDelegate(XXXX.display), new object[]{info}); //delegate asynchrone } }
je pourrais mettre la methode display en static (mais c'est trés crade)
je pourrais utiliser une variable globale faisant réference à ma form instanciée, mais bof
je pourrai passer une ref de l'instance du form instancié dans la classe background par l'intermediare de la methode setup()...
Bref, j'aimerai bien avoir qqchose de propre, et séparer la classe form de la classe de traitement...
Merci pour vos conseils.
Partager