Ik ben bezig met een method die lang nodig heeft voor z'n taak, daarom gebruik ik een BackgroundWorker om deze op de achtergrond uit te voeren, maar natuurlijk wil ik wel het de voortgang bijhouden en weten wanneer hij klaar is is ook wel prettig.
Daarom heb ik 2 custom events, 1 om de voortgang bij te houden en 1 om aan te geven dat hij klaar is. Niet al te ingewikkeld dus. 
Het probleem is alleen dat mijn ProgressChangedEvent altijd null is zodra ik deze probeer af te vuren. Een korte testcase:
Zodra hij bij ProgressChanged aankomt krijg ik een NullReferenceException, en als ik hover over die regel blijkt ProgressChanged inderdaad null te zijn. RenderComplete is wel gewoon een RenderCompleteEvent, en die wordt ook gewoon afgevuurd.
Wat zoekwerk laat zien dat er nog een manier is om events aan te geven, en die heb ik dus ook geprobeerd:
Helaas heeft dit hetzelfde probleem, dus dat is ook geen oplossing.
Zoeken naar "Object reference not set to an instance of an object." heeft niet zoveel nut, ook niet in combinatie met "C# events". Het is immers zo ongeveer de meest voorkomende foutmelding in C#, met de bijbehorende hoeveelheid pagina's die erover gaan.
Daarom hoop ik dat iemand hier me verder kan helpen.
Als ontwikkelomgeving gebruik ik VS2005 Professional SP1 met de Vista fix, op Windows Vista Business SP1 (EN). Dit is dus met het .NET framework 2.0, versie 2.0.50727 SP1 om precies te zijn. Ik heb ook getest op een machine met Windows XP Pro SP3 (EN), met VS2005 Professional SP1 zonder Vista fix, met dezelfde versie van het .NET 2.0 framework. Daarop krijg ik precies hetzelfde probleem.
Het probleem is alleen dat mijn ProgressChangedEvent altijd null is zodra ik deze probeer af te vuren. Een korte testcase:
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
| class TableRenderer : Renderer { private static BackgroundWorker worker; new public delegate void ProgressChangedEvent(object sender, RenderProgressChangedEventArgs ca); new public delegate void RenderCompleteEvent(object sender, RenderCompleteChangedEventArgs ca); new public event RenderCompleteEvent RenderComplete; new public event ProgressChangedEvent ProgressChanged; public TableRenderer() { } public override void Render() { worker = new BackgroundWorker(); worker.DoWork += ToHtml; worker.RunWorkerAsync(); } private void ToHtml(object sender, DoWorkEventArgs e) { ProgressChanged(this, new RenderProgressChangedEventArgs(0, 1)); RenderComplete(this, new RenderCompleteChangedEventArgs(output.ToString())); } } |
Zodra hij bij ProgressChanged aankomt krijg ik een NullReferenceException, en als ik hover over die regel blijkt ProgressChanged inderdaad null te zijn. RenderComplete is wel gewoon een RenderCompleteEvent, en die wordt ook gewoon afgevuurd.
Wat zoekwerk laat zien dat er nog een manier is om events aan te geven, en die heb ik dus ook geprobeerd:
C#:
1
2
| public event EventHandler<RenderProgressChangedEventArgs> RenderProgressChanged; public event EventHandler<RenderCompleteChangedEventArgs> RenderComplete; |
Helaas heeft dit hetzelfde probleem, dus dat is ook geen oplossing.
Zoeken naar "Object reference not set to an instance of an object." heeft niet zoveel nut, ook niet in combinatie met "C# events". Het is immers zo ongeveer de meest voorkomende foutmelding in C#, met de bijbehorende hoeveelheid pagina's die erover gaan.

Als ontwikkelomgeving gebruik ik VS2005 Professional SP1 met de Vista fix, op Windows Vista Business SP1 (EN). Dit is dus met het .NET framework 2.0, versie 2.0.50727 SP1 om precies te zijn. Ik heb ook getest op een machine met Windows XP Pro SP3 (EN), met VS2005 Professional SP1 zonder Vista fix, met dezelfde versie van het .NET 2.0 framework. Daarop krijg ik precies hetzelfde probleem.
Sole survivor of the Chicxulub asteroid impact.