私は現在、タイルベースのマップエディターに取り組んでおり、スクロールを希望どおりに機能させることに重点を置いています。それは私がいくつかの問題を経験するところです。スクロールしている間、画像が生成され、スクロールすると新しいコンテンツが表示されます。これは、新しい側で約200枚の画像(System.Windows.Controls.Image
)が生成されるまで正常に機能します(単純なマップ、複雑ではありません)。
側面で約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