使用Graphics.FromHwnd(…)时出现OutOfMemory异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Graphics.FromHwnd(…)时出现OutOfMemory异常相关的知识,希望对你有一定的参考价值。

我尝试使用以下代码直接绘制到屏幕上:

[DllImport("user32.dll")]
public static extern IntPtr GetDC(IntPtr ptr);

static void draw(Rectangle r, Brush b, IntPtr hwnd)
{
    using (Graphics g = Graphics.FromHwnd(hwnd))
    {
        g.FillRectangle(b, r);
    }
}
static void Main(string[] args)
{
    draw(new Rectangle(0, 0, 400, 400), Brushes.PaleGoldenrod, GetDC(IntPtr.Zero));
}

咨询文档和各种示例,这应该是有效的代码。不过,我在以下行中收到OutOfMemoryException:

using(Graphics g = Graphics.FromHwnd(hwnd))

由于我仅查询单个句柄,所以我不理解如何引发此异常。此示例中没有其他代码。

答案

DC不是HWND。将Graphics.FromHwnd()替换为Graphics.FromHDC()

以上是关于使用Graphics.FromHwnd(…)时出现OutOfMemory异常的主要内容,如果未能解决你的问题,请参考以下文章

WPF获取屏幕缩放比例

WPF获取屏幕缩放比例

像素转换mm

给定 IntPtr 句柄,更改 Window 背景颜色

XtraReport交叉表自适应行高及最佳列宽(转)

C# WinForm画直线,怎么画?