This may sound like a silly question, but why are you doing that at all? If what you are after is "we have to open another form say Form2 and Form1 should be in deactivated state still Form1 closed." (which I assume means "until Form2 closed") then just use ShowDialog:
CreateEnvironment ce = new CreateEnvironment(working_directory);
And forget all the threading, Form1 will be inactive until Form2 closes at which point execution will continue with the instruction following the ShowDialog method call.
Or am I missing something?