我正在努力寻找获得以下行为的最佳方法.....
我有一个LED类,它有一个GUI LED控件,有几个属性,包括一个“On”布尔值。我目前创建了许多新的LED对象并将它们放在表单图片框周围。我希望让它们都引用相同的On布尔值,以便我可以更改变量一次并让它们全部更新它们的状态。我正在考虑以某种方式创建一个包装类并将引用传递给单个对象,但这不会让我独立地更改屏幕上的每个LED对象位置。
我认为这可以通过所有LED对象订阅的事件来完成,但这似乎比指向内存中的相同空间要慢。我目前包含列表中的所有LED对象并枚举每个对象并更新实际上太慢的On属性。我正在计时器中更新50ms的LED状态。
任何帮助都将不胜感激。
答案 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部分更新,但不是全部。
我想象一个传播到所有实例的事件也会花费太长时间,但也许是因为它会在计时器节拍事件中没有阻塞的情况下发生?