c# - Winforms 绘图 - 参数在系统恢复时无效

标签 c# winforms exception drawing

当我的应用程序正在运行并且系统从休眠状态恢复时(在 Windows 7 中),我遇到了一个奇怪的问题。

我正在调用 Graphics.DrawString 方法,大多数情况下都可以正常工作。除非程序正在运行并且我使系统休眠。然后,当我继续时,DrawString 方法抛出一个 ArgumentException(参数无效)并在我应该画的地方给我一个红叉。

这里出了什么问题?捕获异常避免了红叉,但是当我们进入这种状态时就没有办法返回,异常将一直抛出直到程序重新启动。

感谢您的帮助, 艾伦

编辑:这是失败的代码:

protected override void OnPaint(PaintEventArgs e)
{
    // Drawing logic succeeds until this point

    e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), new PointF(x, y));
}

这实际上是 ToolStripLabel 的子类。

最佳答案

许多系统资源在 sleep 或休眠后变得无效。因此,您的字体可能无效,因为这是此类问题的常见原因。我还注意到您没有在 SolidBrush 上调用 Dispose,您应该这样做以防止资源泄漏。像这样...

using(SolidBrush drawBrush = new SolidBrush(ForeColor))
    e.Graphics.DrawString(Text, Font, drawBrush, new PointF(x, y));

关于c# - Winforms 绘图 - 参数在系统恢复时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6540250/

相关文章:

c# - 如何从日期时间对象获取短日期格式

c# - 如何在 TextBox 中自定义绘制边距?

c# - 使用事件处理程序尝试 Catch

python - 为什么建议从 Exception 派生而不是 Python 中的 BaseException 类?

Java - 使用经典for循环会出现并发修改异常吗?

java - 如何使用 Junit 测试处理 try/catch 和 throw

c# - Azure 通知中心为 WNS 注册原始模板

c# - 如何从 CosmosDB 获取文档属性为小写但模型属性为大写的项目?

c# - 如何防止类编译?

c# - Crystal Reports 根据心情加载