所以我有一個WPF應用程序(MVVM)與閃屏。在啓動屏幕啓動時,我在ViewModel上有一個後臺線程,它執行一些啓動相關的活動。在某些情況下,我想打開一些額外的窗口(用戶輸入需要等...)。我在嘗試這樣做時遇到了一些問題/錯誤/異常(主要是圍繞新窗口 - 也是MVVM - 試圖填充它的UI項目,例如組合框)。所以我將問題拉回到了一個更簡單的形式 - 「tempWindow」沒有任何內容,因此它不會拋出UI總體錯誤,但基本上它只是打開它們,一旦後臺線程完成,它們就會關閉它們。如果有人能指出我在正確的方向,我在做什麼不正確,這將不勝感激。從後臺線程ViewModel打開新的Windows
的視圖模型的構造,揭開序幕後臺線程
public SplashScreenViewModel()
{
this.LoadingStatusText = "Starting Startup Processing ... ";
this.VersionNumber = "version " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
var threadBackgroundStartUpProcesses = new Thread(new ThreadStart(this.BackgroundStartUpProcesses));
threadBackgroundStartUpProcesses.SetApartmentState(ApartmentState.STA);
threadBackgroundStartUpProcesses.IsBackground = true;
threadBackgroundStartUpProcesses.Start();
}
後臺線程,應該只開三個窗口(它不會),但這些窗口應該(一旦線程完成disapear)繼續開放。
private void BackgroundStartUpProcesses()
{
for (int i = 0; i < 3; i++)
{
var objTempWindow = new tempWindow();
objTempWindow.Show();
}
}
//編輯:與resopones更新,現在獲取和錯誤時,TempWindow有正在從TempWindowViewModel填充的組合框。
private void BackgroundStartUpProcesses()
{
for (int i = 0; i < 3; i++)
{
var objTempWindow = new tempWindow();
objTempWindow.Show();
}
System.Windows.Threading.Dispatcher.Run();
}
當它打開TempWindow異常:「調用線程無法訪問此對象,因爲不同的線程擁有它。」被引發,並且似乎是當該窗口上的ComboBox試圖被填充時。
我結束了創建窗口的列表被創建,然後在的結束創建一個事件與窗口的列表,並通過該事件傳遞給WPF SplashScreenView,然後在處理該事件的視圖,循環查看列表並打開窗口...不知道這是最好的,但它的作品 – ChrisHDog