我需要从另一个线程更改Microsoft.VisualBasic.PowerPacks.RectangleShape
的颜色,而不是创建它的那个线程。对于像按钮这样的其他控件,我正在执行以下操作:
if (button.InvokeRequired)
{
button.Invoke((System.Action)(() =>
{
button.BackColor = Color.Red;
}));
}
else
{
button.BackColor = Color.Red;
}
问题InvokeRequired
或Invoke
不适用于RectangleShape
。
我该怎么办?
答案 0 :(得分:2)
您可以使用RectangleShape
的{{3}}属性:
if (shape.Parent.InvokeRequired)
{
shape.Parent.Invoke((System.Action)(() =>
{
button.BackColor = Color.Red;
}));
}
else
{
button.BackColor = Color.Red;
}
答案 1 :(得分:2)
Shape将进入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();
}