0
這個可能有點難以解釋,但我會盡我所能。調度程序沒有正確觸發: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();
和模擬料包括:提前
...
UpdateRats(n);
...
THX。
與您的提議相同。無論如何。 –