Ok, we are going to get drastic.
We need to figure out what is happening. We want to see:
1. If the dispose method is called
2. If the dispose method ends
You could use a debugger if you know how, or we can sort of "hack" it for now.
I won't go into the details as to why this works, but here is what we want to do:
Where you create your dialog2 object, change this:
Then run the program and tell me if those two statements print out to the console.