c# - Graphics.DrawImage 是异步的吗?

标签 c# graphics compact-framework drawimage

我只是想知道,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/

相关文章:

c# - Itextsharp HTMLWorker.Parse 错误

c# - ASP.NET 5 API 向调用方返回异常

c# - C#中的字符串有多长?

iphone - 当前图形是否仅在 View 的drawRect中可用 :?

c# - .NET Compact Framework - 没有 ShowDialog 的模态表单

java - 如何使用 Visual Basic 向需要字符串的服务器发出 POST 请求?

c# - Automapper 4.2 Unity Inject MapperConfiguration

java - 弹跳矩形(图形g)

Linux 帧缓冲图形和 VSync

.net - 如何在.NET程序集中安全存储加密 key