Ладно, это настоящая головная боль:
Если я выбираю элемент меню, который приводит к тому, что изображение, которое составляет все окно (writeableBitmap), имеет несколько пикселей, нарисованных на нем, оно делает это и отображается правильно.
Однако, если я добавлю цикл while (скажем, для 5 циклов) к тому же методу, рисунок на растровом изображении НЕ ОТОБРАЖАЕТСЯ до тех пор, пока цикл не будет завершен, а затем правильно отобразится 5-е перерисованное растровое изображение.
Итак, есть ли какое-то «автоматическое обновление», которое происходит с окном, когда пункт меню выбран, но пропускается в цикле while?
Подробнее. Это отлично работает (выводит «чистое» изображение, рисует на нем что-то, отображает его):
// This brings in a 'clean' image
writeableBitmap = new WriteableBitmap(CleanVegMap);
image.Source = writeableBitmap;
// This makes a bunch of draws on the bitmap
DrawDinos2d();
Это, однако, «уходит» на 10 секунд, а затем отображает только последнее (т.е. 5-е) изображение:
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();
}
Новая идея: возможно ли, что 5 «нарисованных» writeableBitmap каким-то образом кэшируются в памяти системой?
Пробовал использовать Диспетчер (как показано ниже):
Dispatcher.Invoke((Action)delegate
{
writeableBitmap = new WriteableBitmap(CleanVegMap);
image.Source = writeableBitmap;
DrawDinos2d();
});
То же самое (пропадает на 10 секунд и потом показывает только последнее изображение.
Еще одна подсказка: я просто поместил MessageBox в цикл внизу каждого цикла, и, как я почему-то подозревал, он правильно «слепил» перерисованный экран. Как-то:
System.Windows.MessageBox.Show("Glarp!");
этот звонок «разбудил» систему. Опять же, есть идеи?