我有一个应用程序,其中UI来自多个线程。有时我得到一个例外,例如“已经在使用的对象”。经过一段时间的搜索,我发现System.Drawing.Brush的使用导致了pblm。所以我在使用Brush之前使用了锁。我的问题是我使用大量的画笔在屏幕上绘制数据。实现的最佳实践是什么,而不是像下面这样使用多个锁。 (注意:具有以下代码的类仅初始化一次)
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);
}
任何帮助都将受到极大的赞赏
由于
答案 0 :(得分:0)
在你的绘图代码中应用锁是非常不可取的。表示什么是基本编码错误,效率低下。
尝试将刷子的副本提供给需要它的每个线程,并冻结它们并使它们只读(因为你没有)(大概)在创建它们之后需要自己修改它们。