Hallo,
Ik ben wat met threading aan het spelen.
Nu heb ik zoals Whoami al een aantal keer gepost heeft een Task object aangemaakt die een actie uitvoert. Dmv een eventhandler schrijf ik een textje naar een textbox.
Ik het task object geef ik de thread een naam, en nu wil ik die weergeven alleen is de thread.name leeg als ik de CurrentThread op haal.
Form:
en de task
Ik wil dus in de UpdateText de aaroepende thread weergeven maar dat gaat dus niet.
Wat doe ik verkeerd?
Ik ben wat met threading aan het spelen.
Nu heb ik zoals Whoami al een aantal keer gepost heeft een Task object aangemaakt die een actie uitvoert. Dmv een eventhandler schrijf ik een textje naar een textbox.
Ik het task object geef ik de thread een naam, en nu wil ik die weergeven alleen is de thread.name leeg als ik de CurrentThread op haal.
Form:
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
| public partial class Form1 : Form { public Form1() { InitializeComponent(); } public event EventHandler _OnStatusChanged; private void btnStart_Click(object sender, EventArgs e) { _OnStatusChanged += new EventHandler(UpdateText); MyTask task1 = new MyTask(); task1.StatusUpdated = _OnStatusChanged; MyTask task2 = new MyTask(); task2.StatusUpdated = _OnStatusChanged; task1.Run("thread1"); task2.Run("thread2"); } public void UpdateText(object sender, EventArgs e) { Thread y = Thread.CurrentThread; txtBox.AppendText("Invoke from \r\n"); } } |
en de task
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| public class MyTask { private event EventHandler _statusUpdated; public EventHandler StatusUpdated { get { return _statusUpdated; } set { _statusUpdated = value; } } public void Run(string name) { Thread thread = new Thread(new ThreadStart(PerformTasks)); thread.Name = name; thread.Start(); } private void PerformTasks() { while (true) { //Do something OnStatusUpdated(); Thread.Sleep(1000); } } private void OnStatusUpdated() { System.Windows.Forms.Control c = _statusUpdated.Target as System.Windows.Forms.Control; if (c != null) { c.Invoke(_statusUpdated, new Object[] { this, EventArgs.Empty }); } else { _statusUpdated(this, EventArgs.Empty); } } } |
Ik wil dus in de UpdateText de aaroepende thread weergeven maar dat gaat dus niet.
Wat doe ik verkeerd?
Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...