I’ve just been driven mad by a “Quantum bug”. What is a quantum bug? Well, it’s a bug that doesn’t exist unless you look at it 🙂
I kept getting a NullReferenceException in my code. It happened whenever I changed a property of a class. I assumed it was something in the framework, but it was in fact in a library of my own. When the property changed it would trigger an observer I had attached, the purpose of this observer is to check if the form that owns my component is the active form, if it is then it records the object that changed; the purpose is to know which objects were modified by which form.
Anyway, to check if the form is active I do this
Form activeForm = System.Windows.Forms.Form.ActiveForm;
Form activeMdiChildForm = activeForm.ActiveMdiChild;
if (activeForm == this.Form || activeMdiChildForm == this.Form)
Now the quantum!
If you are debugging your app Form.ActiveForm will always return null! How useful is that eh? 🙂 So, when debugging my app I get a NullReferenceException, when I let it run through I don’t.
There was me being a good boy, stepping through the code I had just added to check it does what it is supposed to, and Bill punishes me for it!