gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:08:44 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com