How to open a window in a separate thread?

前端 未结 4 1793
慢半拍i
慢半拍i 2021-01-19 13:35

I\'d like to do:

Window newWindow = new Window();
newWindow.Show();

while (true) 
{
    Console.Write(\"spin\");
}

I.e., I\'m doing an int

相关标签:
4条回答
  • 2021-01-19 14:22

    You shouldn't try to open a new Window in it's own thread.

    Instead, push the computational work you're doing into a background thread, and leave the UI thread free. The simplest option for this is typically to use BackgroundWorker. It handles the marshaling of progress and completion back to the UI thread for you automatically.

    However, you can do this yourself using threads or Task/Task<T>, as well. Just remember to use the Dispatcher or a TaskScheduler created from the UI context for anything that will update the UI, such as progress notifcication.

    0 讨论(0)
  • 2021-01-19 14:25

    You don't - there's only one GUI thread. If you need to do blocking work, that stuff has to go in a background thread.

    0 讨论(0)
  • 2021-01-19 14:26

    You need to run a separate message loop in the new thread using the Application class.

    0 讨论(0)
  • 2021-01-19 14:40

    @SLaks This can be very useful if you are trying to launch a new window out of a console app. One option is to use showDialog(); But then its difficult to close it.

    If you use Show() and then an Application.run() (this is the nuts and bolts of using the Application class to start a new message loop)

    When you call Application.Exit() in your main console thread, then the app actually closes;

    using showDialog(), you have to abort the thread, and then wait until the window gets some kind of input ie mouse over or focus. else it will hange on exit forever.

    0 讨论(0)
提交回复
热议问题