如何在状态改变时将计数器递增1

时间:2016-09-16 19:16:47

标签: c# timer counter

我需要显示一个计数器。当状态改变时,它将增加一个。如果状态从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;
        }
    }

1 个答案:

答案 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属性的方法会更好。

此外,问题中提供的代码存在许多问题:

  • SQL注入漏洞
  • 修改属性导致将记录写入数据库的副作用。
  • 最好使用SQL GETDATE()GETUTCDATE()函数来获取日期和时间,而不是从应用程序发送。