Aktualizacja obrazu okna WPF z menuitem, ale nie w pętli while
Dobra, to jest prawdziwy drapacz głowy:
Jeśli wybiorę menu, które powoduje, że obraz, który tworzy całe okno (writeableBitmap), aby narysować na nim kilka pikseli, robi to i wyświetla się poprawnie.
Jeśli jednak dodam pętlę while (powiedzmy na 5 pętli) do tej samej metody, rysunek na mapie bitowej NIE WYŚWIETLA dopóki pętla nie zostanie ukończona, a następnie 5-ta przerysowana bitmapa zostanie poprawnie wyświetlona.
Czy więc istnieje jakieś „automatyczne odświeżanie”, które dzieje się w oknie, gdy wybrano menu, ale jest ono pomijane w pętli while?
Więcej szczegółów. Działa to dobrze (przynosi „czysty” obraz, rysuje na nim kilka rzeczy, wyświetla go):
// This brings in a 'clean' image
writeableBitmap = new WriteableBitmap(CleanVegMap);
image.Source = writeableBitmap;
// This makes a bunch of draws on the bitmap
DrawDinos2d();
To jednak „odchodzi” na 10 sekund, a następnie wyświetla tylko ostatni (tj. 5) obraz:
int z = 0;
while (z < 5){
z++;
// This brings in a 'clean' image
writeableBitmap = new WriteableBitmap(CleanVegMap);
image.Source = writeableBitmap;
// This makes a bunch of draws on the bitmap
DrawDinos2d();
}
Nowy pomysł: czy jest możliwe, że 5 „narysowanych” map zapisu jest buforowanych w pamięci, w jakiś sposób przez system?
Próbowałem użyć Dyspozytora (jak poniżej):
Dispatcher.Invoke((Action)delegate
{
writeableBitmap = new WriteableBitmap(CleanVegMap);
image.Source = writeableBitmap;
DrawDinos2d();
});
To samo (znika na 10 sekund, a następnie wyświetla tylko ostatni obraz).
Kolejna wskazówka: po prostu umieściłem MessageBox w pętli na dole każdej pętli i, jak podejrzewam, „poprawił” poprawnie narysowany ekran. Jakoś:
System.Windows.MessageBox.Show("Glarp!");
to wywołanie „obudziło” system. Znowu jakieś pomysły?