好的,这是一个真正令人头疼的问题:
如果我选择一个导致图像的菜单项,它构成了整个窗口(一个 writeableBitmap)以在其上绘制一些像素,它会这样做并正确显示。
但是,如果我在相同的方法中添加一个 while 循环(比如说 5 个循环),则位图上的绘图在循环完成之前不会显示,然后正确显示第 5 个重绘位图。
So, is there some sort of 'automatic refresh' that is happening to the window when a menuitem is selected but is being skipped in the while loop?
更多细节。这很好用(带来一个“干净”的图像,在上面画一些东西,显示它):
// 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 个“绘制”的 writeableBitmaps 缓存在内存中,以某种方式被系统缓存?
尝试使用 Dispatcher(如下所示):
Dispatcher.Invoke((Action)delegate
{
writeableBitmap = new WriteableBitmap(CleanVegMap);
image.Source = writeableBitmap;
DrawDinos2d();
});
同样的事情(消失 10 秒,然后只显示最后一张图像。
另一个线索:我只是在每个循环底部的循环中放置了一个 MessageBox,并且正如我所怀疑的那样,它正确地“删除”了重绘的屏幕。不知何故:
System.Windows.MessageBox.Show("Glarp!");
这个调用“唤醒”了系统。再一次,有什么想法吗?