从不同于c# GUI线程的线程中更改矩形的颜色
本文关键字:线程 颜色 GUI 不同于 | 更新日期: 2023-09-27 18:19:23
我需要从另一个线程更改Microsoft.VisualBasic.PowerPacks.RectangleShape
的颜色,而不是创建它的线程。对于其他控件,如按钮,我正在做以下操作:
if (button.InvokeRequired)
{
button.Invoke((System.Action)(() =>
{
button.BackColor = Color.Red;
}));
}
else
{
button.BackColor = Color.Red;
}
问题是RectangleShape
没有InvokeRequired
或Invoke
。
我该怎么做呢?
形状将进入ShapeContainer
,可以在shape.Parent
属性中找到。所以你可以使用shape.Parent.InvokeRequired
。
同样遵循DRY原则:
var action = (System.Action)(() =>
{
shape.BackColor = Color.Red;
};
if (shape.Parent.InvokeRequired)
{
shape.Parent.Invoke(action);
}
else
{
action();
}
可以使用RectangleShape
的Parent
属性:
if (shape.Parent.InvokeRequired)
{
shape.Parent.Invoke((System.Action)(() =>
{
button.BackColor = Color.Red;
}));
}
else
{
button.BackColor = Color.Red;
}