我目前正在开发一个基于图块的地图编辑器,专注于让滚动完全按照我的意愿工作。这就是我遇到一些麻烦的地方。滚动时,会生成图像以在您滚动时显示新内容。这可以正常工作,直到System.Windows.Controls.Image
在新的一侧生成大约 200 个图像( )(简单的地图,不复杂)。
每当在侧面生成大约 1000 张图像(或者更多,如果您滚动得更快..),应用程序将挂起一段时间,具体取决于您滚动的速度等。
这种暂时挂断的原因总是由这条线路引起的。删除这条线完全消除了“滞后”(但显然没有给出想要的结果):
img.Source = it.GetFullSpriteSource(0);
该方法生成一个 ImageSource,如果已经生成,则返回存储在变量中的 ImageSource。问题不在于这种方法,因为下面的场景给出了同样的问题。
public static ImageSource yellowimg;
[...]
System.Drawing.Bitmap derp = new System.Drawing.Bitmap(32, 32);
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(derp))
g.FillRectangle(System.Drawing.Brushes.Yellow, 0, 0, 32, 32);
yellowimg = Utilities.ToImgSource(derp);
[...]
img.Source = yellowimg;
所以问题可能在于我分配了 ImageSource。
我正在从这样的位图中生成一个 ImageSource,可能是相关的:
public static ImageSource ToImgSource(Bitmap bitmap)
{
return Imaging.CreateBitmapSourceFromHBitmap(
bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
我也尝试过在单独的线程中生成(后台生成),但这会导致以下错误,尝试从另一个线程读取 ImageSource。
The calling thread cannot access the object because different thread owns it
我可以尝试什么?
请记住,我对 WPF(最近开始)并不先进,而且我对ImageSource
.
谢谢,
〜Tgys