我需要显示一个计数器。当状态改变时,它将增加一个。如果状态从true变为false,它将增加1但只增加一次,然后在下一个假,它将再次递增。我的问题是我正在使用计时器,所以如果我的状态在1分钟内保持为假,那么计数器将显示60增加1。我只需要递增一次..e.g如果它变为true,则它将递增1。然后等待状态返回到true然后再次为false然后它应该递增1,否则计数器将只有1。请帮帮我
void opc_status()
{
Int32 InRuntimeNumber = 0;
InRuntimeNumber = ModuleNetworkNode.OPCSystemsComponent1.InRuntime("192.168.1.2");
if (InRuntimeNumber == -1)
{
textBox.Text= "Service not reached";
}
else if (InRuntimeNumber == 1)
{
textBox.Text = "Active";
}
else
{
textBox.Text = "Stopped";
//rectangle_opc.Fill = new SolidColorBrush(Color.FromRgb(255, 226, 77));
}
public Boolean Status
{
get
{
return _status;
}
set
{
if (_status != value)
{
if (con.State != ConnectionState.Open)
{
con.Close();
con.Open();
}
SqlCommand cmd = new SqlCommand(" INSERT INTO Report (Date,Time, Event, [Type of Alarm]) VALUES ('" + DateTime.Now.Date.ToShortDateString() + "','" + DateTime.Now.ToString("t") + "','" + textBox.Text + "','" + "opc" + "')", con);
cmd.ExecuteNonQuery();
counterlabel.Content = counter++;
}
_status = value;
}
}
答案 0 :(得分:0)
最简单的方法(没有看到代码)是使用一个具有副作用的属性(我知道,不是一个很棒的解决方案),它会为你增加计数器。
public class foo{
private bool bar;
private int counter;
private bool Bar {
get{
return bar;
}
set{
if(bar != value && bar){
counter++;
}
bar = value;
}
}
}
编辑:根据要求更新。应该注意的是,这不是一个很好的方法,而是修改bar
属性的方法会更好。
此外,问题中提供的代码存在许多问题:
GETDATE()
或GETUTCDATE()
函数来获取日期和时间,而不是从应用程序发送。