2011-06-15 30 views
1

窗口_splash在不同的線程上創建。WPF - 將Window.Owner初始化爲在不同線程上創建的窗口

MainWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner; 
MainWindow.Owner = _splash; // Throw: The calling thread cannot access this object because a different thread owns it 

我該如何讓這段代碼有效?

+2

答:不要在後臺線程上創建窗口。 – 2011-06-15 20:19:50

+0

切勿在後臺線程上操作UI。我沒有意識到其他操作系統,但是在使用標準控件的Win32應用程序中,這是不可行的。 – 2011-06-15 20:21:02

+0

WPF完全能夠擁有多個UI線程,但是*任何* Windows應用程序(無論WPF與否)都會遇到問題,如果您嘗試使一個線程的窗口由另一個線程的窗口擁有。 Windows在兩個線程之間附加線程輸入,並且失去了多線程的所有優點。如果你需要所有者,不要在多個不同的線程上創建UI。 – 2011-06-15 22:30:22

回答

1

聽起來不錯,但是您可以通過在運行主窗口的UI線程上運行啓動畫面來修復它。爲什麼啓動畫面需要自己的線程?

0
  1. 不要在UI線程上做任何長時間運行的工作。使用BackgroundWorker s或類似ReactiveExtensions來簡化。
  2. 在UI線程上創建所有Window實例。