我只是想知道,Graphics.DrawImage()
是异步的吗?
我正在努力解决线程安全问题,无法弄清楚问题出在哪里。
如果我在 GUI 线程中使用以下代码:
protected override void OnPaint(PaintEventArgs e)
{
lock (_bitmapSyncRoot)
{
e.Graphics.DrawImage(_bitmap, _xPos, _yPos);
}
}
并在单独的线程中编写以下代码:
private void RedrawBitmapThread()
{
Bitmap newBitmap = new Bitmap(_width, _height);
// Draw bitmap //
Bitmap oldBitmap = null;
lock (_bitmapSyncRoot)
{
oldBitmap = _bitmap;
_bitmap = newBitmap;
}
if (oldBitmap != null)
{
oldBitmap.Dispose();
}
Invoke(Invalidate);
}
这可以解释 accessviolation 异常吗?
代码运行在 windows mobile 6.1 设备上,框架为 compact framework 3.5。
编辑:
没关系,当方法在同一线程中执行时也会发生这种情况..
最佳答案
是的,是同步的。但是您在此代码中做出了更大的假设,假设创建任何 Graphics 对象都是线程安全的。 Afaik 它在 GDI+ 的桌面版本上。在像 WM 这样的资源有限的操作系统上不太可能。没有什么是你可以锁定的,用于绘画的是用你无法触摸的代码创建的。
关于c# - Graphics.DrawImage 是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3035809/