C#多个对象共享对布尔值的引用
本文关键字:布尔值 引用 共享 对象 | 更新日期: 2023-09-27 18:20:56
我正在努力寻找获得以下行为的最佳方法。。。。。
我有一个LED类,它有一个GUI LED控件,它有几个属性,包括一个"On"布尔值。我目前创建了许多新的LED对象,并将它们放置在一个表单图片框周围。我想让它们都引用相同的On布尔值,这样我就可以更改变量一次,并让它们都更新状态。我想以某种方式创建一个包装类,并传递对单个对象的引用,但这不会让我独立地更改屏幕上每个LED对象的位置。
我认为这可以通过所有LED对象都订阅的事件来完成,但这似乎比指向内存中的同一空间要慢。我目前正在列表中包含所有LED对象,并枚举每个对象,并更新On属性,这实际上太慢了。我正在计时器中以50ms更新LED状态。
如有任何帮助,我们将不胜感激。
不是答案,但不让我发表评论。
我本来以为这样的东西可以做我想做的事,但它不起作用。也许这表明了我希望发生的事情。
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的滴答声发生之前将它们全部更新。这种行为会导致屏幕上的部分指示灯更新,但不是全部更新。
我设想一个传播到所有实例的事件也会花费太长时间,但也许因为这是一个事件,它会在计时器滴答事件中发生而不会阻塞?