从不同于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没有InvokeRequiredInvoke

我该怎么做呢?

从不同于c# GUI线程的线程中更改矩形的颜色

形状将进入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();
}

可以使用RectangleShapeParent属性:

if (shape.Parent.InvokeRequired)
{
    shape.Parent.Invoke((System.Action)(() =>
    {
        button.BackColor = Color.Red;
    }));
}
else
{
   button.BackColor = Color.Red;
}