Это может быть немного сложно объяснить, но я сделаю все возможное.диспетчер не запускается правильно: Application.Current.Dispatcher.Invoke
Окружающая среда - приложение WPF MVVM.
Один из класса включает в себя: ...
public ObservableCollection<Rat> Rats { get; set; }
...
public void UpdateRats(int nbRats)
{
try
{
if (nbRats > 0)
{
for (int i = 0; i < nbRats; i++)
{
Application.Current.Dispatcher.Invoke(() => Rats.Add(new Rat()));
// Application.Current.Dispatcher.BeginInvoke( new Action(() => Rats.Add(new Rat() )));
// Rats.Add(new Rat());
}
}
if (threadSimul != null && !threadSimul.IsAlive)
{
threadSimul = new Thread(new ThreadStart(simul));
threadSimul.Start();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Когда UpdateRats вызывается потоком, который создал этот объект, все работает отлично. Когда он вызывается из другого потока, выполнение, похоже, останавливается при вызове диспетчера: Application.Current.Dispatcher.Invoke (() => Rats.Add (new Rat()));
Отладчик прекращает показывать активность в этой ветке, хотя пошаговое отладка не показывает доказательств того, что она выходит из потока. Нить, где все еще жив, но я не вижу в этом ничего.
Могу ли я вызвать диспетчера неправильно?
Есть ли причина?
Если это уместно, второй поток создается таким образом:
threadSimul = new Thread(() => simul());
threadSimul.SetApartmentState(ApartmentState.STA);
threadSimul.Start();
и Simul содержит:
...
UpdateRats(n);
...
Thx заранее.
Тот же результат с вашим предложением. Thx в любом случае. –