Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Two UI Thread in C# windows Application

Tags:

c#

winforms

How can I implement two ui threads in a C# windows application?

like image 738
Hossein Moradinia Avatar asked Dec 13 '22 16:12

Hossein Moradinia


1 Answers

You need to call Thread.SetApartmentState() to switch the thread to STA before starting it. And pump a message loop to keep any windows created on that thread alive, Application.Run(). Application.ExitThread() will terminate the message loop and cause the thread to exit. Using Run(Form) makes that automatic, just as it does on the main thread.

Beware however that the user may well have a hard time dealing with the windows you create on that thread. They have no Z-order relationship with the windows in the main thread, the desktop is their parent. That tends to make them easily get lost behind another window, including your own. Awkward workarounds for that are TopMost and pinvoking SetParent().

like image 124
Hans Passant Avatar answered Dec 26 '22 11:12

Hans Passant