Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Monitoring a variable in C#

I am wondering what is the best way to monitor a variable in C#. This is not for debugging. I basically want the program it self to monitor one of its variable all the time during running. For example. I am trying to watch if _a is less then 0; if it is, then the program stops.

 _a = _b - _c; // (_b >= _c) 

So _a ranges within [0 N], where N is some positive int; I feel the best is to start a thread that monitors the _a value. Once it, then I should response. But I have no idea how to implement it. Any one has any suggestions? A short piece of code sample will be highly appreciated.

like image 285
Nick Tsui Avatar asked Dec 03 '25 02:12

Nick Tsui


2 Answers

Instead of trying to monitor the value within this variable, you can make this "variable" a property of your class, or even wrap it's access into a method for setting the value.

By using a property or method, you can inject custom logic into the property setter, which can do anything, including "stopping the program."

Personally, if the goal was to stop the program, I would use a method:

private int _a;
public void SetA(int value)
{
    if (value < 0)
    { 
        // Stop program?
     }
    _a = value;
}

Then call via:

yourClass.SetA(_b - _c);

The reason I would prefer a method is that this has a distinct, dramatic side effect, and the expectation is that a property setter will be a quick operation. However, a property setter would work just as well from a technical standpoint.

A property could do the same thing:

private int _a;
public int A
{
    get { return _a; }
    set
    {
        if (value < 0)
        {
            // Handle as needed
        }

        _a = value;
    }
}
like image 164
Reed Copsey Avatar answered Dec 04 '25 14:12

Reed Copsey


The best way is to encapsulate your variable with a property.

Using this approach you can extend the setter of your property with custom logic to validate the value, logging of changes of your variable or notification (event) that your variable/property has changed.

 private int _a;

 public int MyA {
  get{
    return _a;
  }
  set {
    _a = value;
  }
 }
like image 31
Jehof Avatar answered Dec 04 '25 15:12

Jehof