C#多个对象共享对布尔值的引用

时间:2015-11-07 19:15:13

标签: c# reference led

我正在努力寻找获得以下行为的最佳方法.....

我有一个LED类,它有一个GUI LED控件,有几个属性,包括一个“On”布尔值。我目前创建了许多新的LED对象并将它们放在表单图片框周围。我希望让它们都引用相同的On布尔值,以便我可以更改变量一次并让它们全部更新它们的状态。我正在考虑以某种方式创建一个包装类并将引用传递给单个对象,但这不会让我独立地更改屏幕上的每个LED对象位置。

我认为这可以通过所有LED对象订阅的事件来完成,但这似乎比指向内存中的相同空间要慢。我目前包含列表中的所有LED对象并枚举每个对象并更新实际上太慢的On属性。我正在计时器中更新50ms的LED状态。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

不是答案,但不会让我发表评论。

我在想这样的事情可以做我想要的但是不起作用。也许这显示了我希望会发生的事情。

using System;
using System.Windows.Forms;

namespace FormTestApplication
{
    public partial class Form1 : Form
    {
        private Boolean state = false;  //global variable that updates everyone.

        public Form1()
        {
            InitializeComponent();

            MyCheck my1 = new MyCheck(ref state);
            my1.Top = 100;
            my1.Left = 100;
            MyCheck my2 = new MyCheck(ref state);
            my2.Top = 120;
            my2.Left = 100;
            MyCheck my3 = new MyCheck(ref state);
            my3.Top = 140;
            my3.Left = 100;

            this.Controls.Add(my1);
            this.Controls.Add(my2);
            this.Controls.Add(my3);

            state = true;  //changing this one variable should causes all 3 to update to checked.  This does not work.

        }
    }

    public class MyCheck : CheckBox
    {

        private Boolean status
        {
            get { return this.Checked; }
            set
            {
                this.Checked = value;
                Invalidate();
            }
        }

        public MyCheck(ref Boolean b)
        {
            status =  b;
        }



    }
}

我认为需要这样的东西,因为在foreach循环中设置所有实例并不会在下一个50ms滴答发生之前全部更新它们。此行为导致屏幕上的LED部分更新,但不是全部。

我想象一个传播到所有实例的事件也会花费太长时间,但也许是因为它会在计时器节拍事件中没有阻塞的情况下发生?