从多个线程使用Brush时出现问题

本文关键字:问题 Brush 线程 | 更新日期: 2023-09-27 18:29:54

我有一个应用程序,其中的UI是从多个线程绘制的。有时我会遇到一个异常,比如"Object already in use"。搜索了一段时间后,我发现使用System.Drawing.Brush导致了pblm。所以我在使用Brush之前使用了lock。我的问题是我用很多画笔在屏幕上绘制数据。实现的最佳实践是什么,而不是像下面这样使用多个锁。(注意:具有以下代码的类只初始化一次)

Brush redBrush = Brushes.Red;
lock(redBrush) {
    grph.DrawString(screenText1, this.Font, redBrush, rectangle, textFormat);
}

Brush blackBrush = Brushes.Black;
lock(blackBrush ) {
    grph.DrawString(screenText2, this.Font, blackBrush, rectangle, textFormat);
}
Brush blueBrush = Brushes.Blue;
lock(blueBrush ) {
    grph.DrawString(screenText3, this.Font, blueBrush, rectangle, textFormat);
}

任何帮助都将不胜感激

感谢

从多个线程使用Brush时出现问题

在绘图代码中这样应用锁是非常不可取的。所指示的是一个基本的编码错误,并且是低效的。

尝试为每个需要的线程提供一个笔刷副本,并冻结它们并使其只读,因为创建笔刷后(可能)不需要修改笔刷本身。