C# – Application window sent behind other windows on closing different thread (C#)

cmultithreadingsplash-screenwinforms

I'm writing a Windows Forms Application in C#.NET

On startup, the application displays a splash screen which is running in a separate thread. Whilst the splash screen is showing, the main application is initialising.

Once the main application has finished initialising, the main form of the application is displayed, and the splash screen still shows over the top.

Everything so far is as expected.

Then, the Splash screen is closed, which causes that thread to exit. For some reason, at the point, the main application windows gets sent behind all other open Windows, notably the Windows Explorer window where you clicked the .exe file to run the application in the first place!

What could be causing the windows to suddenly jump "behind" like this?

Best Answer

Try calling .Activate() on your main window when your thread closes.

It's never been active, and thus has low Z-Order, so whatever is higher will naturally be above it. I had to fix this exact scenario in our app.

Don't forget! You may need to marshal the call to the correct thread using an Invoke()!

Related Topic