lang:csharp:thread
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
lang:csharp:thread [2019/01/11 14:08] – Ajout de la note concernant le bordel entre thread. root | lang:csharp:thread [2020/05/11 00:51] (Version actuelle) – Fix alignement des images root | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
=====Blocage inter-threads===== | =====Blocage inter-threads===== | ||
- | [[https:// | + | [[https:// |
====Sans aideur==== | ====Sans aideur==== | ||
===Sans valeur de retour=== | ===Sans valeur de retour=== | ||
Ligne 80: | Ligne 80: | ||
====Thread classique==== | ====Thread classique==== | ||
- | <note important> | + | <WRAP center round important |
D'une manière générale, je déconseille l' | D'une manière générale, je déconseille l' | ||
- | {{ : | + | {{: |
Donc pour que chaque Thread reste bien indépendant, | Donc pour que chaque Thread reste bien indépendant, | ||
- | </note> | + | </WRAP> |
<code csharp> | <code csharp> | ||
Ligne 133: | Ligne 133: | ||
=====Threads accédant aux composants d'une form===== | =====Threads accédant aux composants d'une form===== | ||
Il faut arrêter les threads accédant aux composants d'une Form avant de la détruire. Sinon, des exceptions vont être générées. | Il faut arrêter les threads accédant aux composants d'une Form avant de la détruire. Sinon, des exceptions vont être générées. | ||
+ | |||
+ | La solution la plus simple est d' | ||
+ | |||
+ | Mais si on souhaite un arrêt non brutal des threads, on peut utiliser la classe ci-dessous. | ||
+ | |||
+ | On crée un '' | ||
+ | |||
+ | A la fermeture de la fenêtre, on appelle la méthode '' | ||
<file csharp ManageThread.cs> | <file csharp ManageThread.cs> | ||
Ligne 212: | Ligne 220: | ||
// Travail à faire. | // Travail à faire. | ||
}); | }); | ||
- | | + | |
- | | + | manageThread.Add(t); |
- | { | + | |
- | t.Start(); | + | |
- | } | + | |
| | ||
private void Form1_FormClosed(object sender, FormClosedEventArgs e) | private void Form1_FormClosed(object sender, FormClosedEventArgs e) | ||
Ligne 227: | Ligne 232: | ||
=====Threads lambda utilisant une variable locale===== | =====Threads lambda utilisant une variable locale===== | ||
- | [[https:// | + | [[https:// |
Mauvais : | Mauvais : | ||
Ligne 256: | Ligne 261: | ||
</ | </ | ||
- | Autre possibilité (non totalement identique en cas de nombreux threads en parallèle) : utilisation de Parallel.For. | ||
<code csharp> | <code csharp> | ||
- | Parallel.For(0, | + | Parallel.For(0, |
i => | i => | ||
{ | { | ||
Ligne 265: | Ligne 269: | ||
); | ); | ||
</ | </ | ||
+ | Il est important de préciser le nombre maxi de threads sinon, si la charge baisse lors de l' |
lang/csharp/thread.1547212139.txt.gz · Dernière modification : 2019/01/11 14:08 de root