Bonjour à tous,
Je rencontre une anomalie que je n'arrive pas à résoudre.
J'ai écrit un Windows Form simple en C# avec 2 boutons (Démarrer et Arrêter) permettant le démarrage et l'arrêt d'un Thread (Cf.code).
En mode "Exécution" et en mode "Debug" sans point d'arrêt, tout se passe nickel !
Par contre, en mode Debug avec un point d'arrêt positionné sur le "Sleep" (Cf. code), le debugger se bloque qq secondes et plante le thread sans autre forme de procès...
Je vous fais grâce du source de Program.cs (standard).
Merci à tout ceux qui peuvent m'aider à qualifier mon anomalie.
PS : Merci à Pascal Belaud pour sa Saga pour le source VB (transformé en C# par mes soins) intitulé "Threading", chapitre 6...
http://www.microsoft.com/france/vision/saga-dot-net/
Voici leLe Form.Designer.cs...
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace DemoThreadCSharp { public partial class Form1 : Form { private Thread m_Thd; public Form1() { InitializeComponent(); } private void button_Demarrer_Click(object sender, EventArgs e) { m_Thd = new Thread(Demarrer); m_Thd.Start(); MessageBox.Show("Thead démarré...", "Information", MessageBoxButtons.OK); } private void Demarrer() { for (int i = 0; i < 100000; i++) { MajLabel(i.ToString()); Thread.Sleep(500); } } private delegate void MajLabelDlg(String pTxt); private void MajLabel(String pTxt) { if (label1.InvokeRequired) { label1.Invoke(new MajLabelDlg(MajLabel), pTxt); return; } label1.Text = pTxt; } private void button_Arreter_Click(object sender, EventArgs e) { m_Thd.Abort(); } } }
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 namespace DemoThreadCSharp { partial class Form1 { /// <summary> /// Variable nécessaire au concepteur. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Nettoyage des ressources utilisées. /// </summary> /// <param name="disposing">true si les ressources managées doivent être supprimées*; sinon, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Code généré par le Concepteur Windows Form /// <summary> /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas /// le contenu de cette méthode avec l'éditeur de code. /// </summary> private void InitializeComponent() { this.button_Demarrer = new System.Windows.Forms.Button(); this.button_Arreter = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // button_Demarrer // this.button_Demarrer.Location = new System.Drawing.Point(38, 41); this.button_Demarrer.Name = "button_Demarrer"; this.button_Demarrer.Size = new System.Drawing.Size(75, 23); this.button_Demarrer.TabIndex = 0; this.button_Demarrer.Text = "Demarrer"; this.button_Demarrer.UseVisualStyleBackColor = true; this.button_Demarrer.Click += new System.EventHandler(this.button_Demarrer_Click); // // button_Arreter // this.button_Arreter.Location = new System.Drawing.Point(174, 41); this.button_Arreter.Name = "button_Arreter"; this.button_Arreter.Size = new System.Drawing.Size(75, 23); this.button_Arreter.TabIndex = 1; this.button_Arreter.Text = "Arreter"; this.button_Arreter.UseVisualStyleBackColor = true; this.button_Arreter.Click += new System.EventHandler(this.button_Arreter_Click); // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(32, 95); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(0, 13); this.label1.TabIndex = 2; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(292, 273); this.Controls.Add(this.label1); this.Controls.Add(this.button_Arreter); this.Controls.Add(this.button_Demarrer); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button button_Demarrer; private System.Windows.Forms.Button button_Arreter; private System.Windows.Forms.Label label1; } }
Partager