2016-09-16 35 views
-1

我需要显示一个计数器。当状态发生变化时,它会增加一个。如果状态从真变为假,它将增加1,但只会增加一次,再次增加。我的问题是我正在使用计时器,所以如果我的状态在1分钟内保持为假,计数器将显示60,并且它将增加1。我只需要增加一次..e.g如果它改变为真,它会增加一个。然后等待,如果状态回到真,然后再次假,那么它应该增加一,否则计数器将只是一个。帮我在取悦如何在状态发生变化时将计数器加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; 
     } 
    } 
+5

向我们显示您的代码。 –

+0

我更新了我的问题 – ROMA

回答

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()函数来获取日期和时间,而不是从应用程序发送该日期和时间。
+0

谢谢你。我添加了基于这些的代码,我必须增加计数器 – ROMA

+0

它只会增加,如果它停止或服务nit达成。我在计时器中使用该函数,如果它停止或活动,它将持续检查状态。 – ROMA

+0

使用你的代码将在两个.e.g上增加,如果它从true到false或false从true .. – ROMA

相关问题