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

本文关键字:布尔值 引用 共享 对象 | 更新日期: 2023-09-27 18:20:56

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

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

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

如有任何帮助,我们将不胜感激。

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

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

我本来以为这样的东西可以做我想做的事,但它不起作用。也许这表明了我希望发生的事情。

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的滴答声发生之前将它们全部更新。这种行为会导致屏幕上的部分指示灯更新,但不是全部更新。

我设想一个传播到所有实例的事件也会花费太长时间,但也许因为这是一个事件,它会在计时器滴答事件中发生而不会阻塞?