Ik heb een Form, een UserControl en een Class waarin het e.e.a. uitgevoerd wordt.
Het usercontrol start de Class in een aparte thread op. Nu wil ik informatie uit de class (bijvoorbeeld in de vorm van "klaar met verwerken") terug geven in een Textbox op het Form.
Form:
Events.cs
UserControl.cs
De informatie uit het usercontrol werkt perfect. M.a.w. ik krijg in een textbox op Form1 netjes de tekst Processing... te zien. Alleen om de informatie uit de Class te halen lukt me niet.
Alleen de informatie uit de thread krijg ik niet door.
Probeer ik in Run() het e.e.a. te invoken, krijg ik
Het lijkt mij onlogisch om op bijvoorbeeld het usercontrol het volgende te plaatsen:
Met andere woorden, Events en Methods nog een keer aan usc_Control hangen. Lijkt mij niet de bedoelin.
Ik zit volgens mij enorm te aan te kloten met events en delegates. Eigenlijk is mijn vraag: hoe krijg ik informatie uit de WorkThread terug naar het Form.
is dit toevallig Event Bubbling?
Het usercontrol start de Class in een aparte thread op. Nu wil ik informatie uit de class (bijvoorbeeld in de vorm van "klaar met verwerken") terug geven in een Textbox op het Form.
Form:
C#:
1
2
3
4
5
6
7
8
9
10
| public PrintManager() { InitializeComponent(); UserControl.Notification += new Events.OutPutNotify(UpdateServerOutput); } private void UpdateServerOutput(string Notify, bool ClearOutput) { if (ClearOutput) { txtServerOutput.Clear(); } txtServerOutput.AppendText(Notify + Environment.NewLine); } |
Events.cs
C#:
1
2
3
4
5
6
7
| public class Events { public delegate void OutPutNotify(string Message, bool ClearOutput); public Events() { } } |
UserControl.cs
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public usc_Control() { InitializeComponent(); } public event Events.OutPutNotify Notification; Thread startThread; private void Tester() { WorkThread thread = new WorkThread(); thread.Run(); } private void button1_Click(object sender, EventArgs e) { Notification("Processing...",false); startThread = new Thread(new ThreadStart(this.Tester)); startThread.Start(); } |
De informatie uit het usercontrol werkt perfect. M.a.w. ik krijg in een textbox op Form1 netjes de tekst Processing... te zien. Alleen om de informatie uit de Class te halen lukt me niet.
Alleen de informatie uit de thread krijg ik niet door.
C#:
1
2
3
4
5
6
7
8
9
| usc_Control uiForm; public WorkThread(usc_Control control) { uiForm = control; } public void Run() { uiForm.Invoke(uiForm.Notification, new object[] { "melp", false }); } |
Probeer ik in Run() het e.e.a. te invoken, krijg ik
code:
Deze melding heb ik meerdere malen doorgenomen, alleen begrijp ik er niks van.1
| The event 'usc_Control.Notification' can only appear on the left hand side of += or -= (except when used from within the type usc_Control') |
Het lijkt mij onlogisch om op bijvoorbeeld het usercontrol het volgende te plaatsen:
C#:
1
2
3
4
5
6
7
8
9
10
| public delegate void UpdateOutput(string s, bool o); public partial class usc_Control: UserControl { public UpdateOutput m_UpdateOutput; public usc_Control() { InitializeComponent(); } } |
Met andere woorden, Events en Methods nog een keer aan usc_Control hangen. Lijkt mij niet de bedoelin.
Ik zit volgens mij enorm te aan te kloten met events en delegates. Eigenlijk is mijn vraag: hoe krijg ik informatie uit de WorkThread terug naar het Form.
is dit toevallig Event Bubbling?
Heart..pumps blood.Has nothing to do with emotion! Bored