变量值更改时如何触发事件?

我目前正在使用Visual Studio在C#中创建一个应用程序。我想创建一些代码,以便当变量的值为1时,就执行了一段代码。我知道我可以使用if语句,但是问题是该值将在异步过程中更改,因此从技术上讲,可以在更改值之前忽略if语句。

是否可以创建事件处理程序,以便在变量值更改时触发事件?如果是这样,我该怎么做?

我完全有可能误解了if语句的工作原理!任何帮助将非常感激。


交互式爱情
浏览 656回答 3
3回答

料青山看我应如是

在我看来,您想创建一个属性。public int MyProperty{    get { return _myProperty; }    set    {        _myProperty = value;        if (_myProperty == 1)        {            // DO SOMETHING HERE        }    }}private int _myProperty;这使您可以在属性值更改时随时运行一些代码。如果您愿意,可以在这里提出一个活动。

翻翻过去那场雪

每当字段的值要更改时,都可以使用属性设置器引发事件。您可以拥有自己的EventHandler委托,也可以使用著名的System.EventHandler委托。通常有一种模式:使用事件处理程序委托(其参数类型为EventArgs)定义公共事件。定义一个受保护的虚拟方法,称为OnXXXXX(例如OnMyPropertyValueChanged)。在此方法中,您应该检查事件处理程序委托是否为null,如果不是,则可以调用它(这意味着事件委托附加了一个或多个方法)。每当您想通知订阅者某些更改时,请调用此受保护的方法。这是一个例子private int _age;//#1public event System.EventHandler AgeChanged;//#2protected virtual void OnAgeChanged(){      if (AgeChanged != null) AgeChanged(this,EventArgs.Empty); }public int Age{    get    {         return _age;    }    set    {         //#3         _age=value;         OnAgeChanged();    } }这种方法的优势在于,如果需要,您可以让任何其他想要从您的类继承的类更改其行为。如果要在正在引发的其他线程中捕获事件,则必须注意不要更改在另一个线程中定义的对象的状态,这将导致引发跨线程异常。为避免这种情况,您可以在要更改其状态的对象上使用Invoke方法,以确保更改在引发事件的同一线程中进行,或者在处理Windows窗体的情况下,可以使用BackgourndWorker在并行线程中轻松轻松地执行操作。
打开App,查看更多内容
随时随地看视频慕课网APP