从多个线程使用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);
}
任何帮助都将不胜感激
感谢
在绘图代码中这样应用锁是非常不可取的。所指示的是一个基本的编码错误,并且是低效的。
尝试为每个需要的线程提供一个笔刷副本,并冻结它们并使其只读,因为创建笔刷后(可能)不需要修改笔刷本身。