Итак, у меня есть приложение WPF (MVVM) с заставкой.При запуске заставки у меня есть фоновая нить в ViewModel, которая выполняет некоторые действия, связанные с запуском.В некоторых случаях я хочу открыть пару дополнительных окон (требуется пользовательский ввод и т. Д.).Я получал ряд проблем / ошибок / исключений при попытке сделать это (в основном вокруг этого нового окна - также MVVM - при попытке заполнить его элементы пользовательского интерфейса, такие как поля со списком).Итак, я вернул проблему к более простой форме - у «tempWindow» ничего нет, поэтому он не выдает ошибки заполнения пользовательского интерфейса, но в основном он просто открывает их, и как только фоновый поток завершается, закрывает их все,Если бы кто-то мог указать мне правильное направление на то, что я делаю неправильно, это было бы оценено.
Конструктор для ViewModel запускает фоновый поток
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();
}
Фоновый поток,следует просто открыть три окна (что и происходит), но эти окна должны оставаться открытыми (они исчезают после завершения потока).
private void BackgroundStartUpProcesses()
{
for (int i = 0; i < 3; i++)
{
var objTempWindow = new tempWindow();
objTempWindow.Show();
}
}
// РЕДАКТИРОВАТЬ: обновляется с ответами, теперь появляется ошибка, когда TempWindow имеетcomboBox, который заполняется из TempWindowViewModel.
private void BackgroundStartUpProcesses()
{
for (int i = 0; i < 3; i++)
{
var objTempWindow = new tempWindow();
objTempWindow.Show();
}
System.Windows.Threading.Dispatcher.Run();
}
При открытии TempWindow возникает исключение: «Вызывающий поток не может получить доступ к этому объекту, поскольку его принадлежит другой поток».выдается и появляется, когда ComboBox в этом окне пытается заполниться.