为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
交互式爱情 2019-12-12 13:50:14
我目前正在使用Visual Studio在C#中创建一个应用程序。我想创建一些代码,以便当变量的值为1时,就执行了一段代码。我知道我可以使用if语句,但是问题是该值将在异步过程中更改,因此从技术上讲,可以在更改值之前忽略if语句。是否可以创建事件处理程序,以便在变量值更改时触发事件?如果是这样,我该怎么做?我完全有可能误解了if语句的工作原理!任何帮助将非常感激。
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

在我看来,您想创建一个属性。


public int MyProperty

{

    get { return _myProperty; }

    set

    {

        _myProperty = value;

        if (_myProperty == 1)

        {

            // DO SOMETHING HERE

        }

    }

}


private int _myProperty;

这使您可以在属性值更改时随时运行一些代码。如果您愿意,可以在这里提出一个活动。


查看完整回答
反对 回复 2019-12-12
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

每当字段的值要更改时,都可以使用属性设置器引发事件。


您可以拥有自己的EventHandler委托,也可以使用著名的System.EventHandler委托。


通常有一种模式:


使用事件处理程序委托(其参数类型为EventArgs)定义公共事件。

定义一个受保护的虚拟方法,称为OnXXXXX(例如OnMyPropertyValueChanged)。在此方法中,您应该检查事件处理程序委托是否为null,如果不是,则可以调用它(这意味着事件委托附加了一个或多个方法)。

每当您想通知订阅者某些更改时,请调用此受保护的方法。

这是一个例子


private int _age;


//#1

public event System.EventHandler AgeChanged;


//#2

protected virtual void OnAgeChanged()

     if (AgeChanged != null) AgeChanged(this,EventArgs.Empty); 

}


public int Age

{

    get

    {

         return _age;

    }


    set

    {

         //#3

         _age=value;

         OnAgeChanged();

    }

 }

这种方法的优势在于,如果需要,您可以让任何其他想要从您的类继承的类更改其行为。


如果要在正在引发的其他线程中捕获事件,则必须注意不要更改在另一个线程中定义的对象的状态,这将导致引发跨线程异常。为避免这种情况,您可以在要更改其状态的对象上使用Invoke方法,以确保更改在引发事件的同一线程中进行,或者在处理Windows窗体的情况下,可以使用BackgourndWorker在并行线程中轻松轻松地执行操作。


查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 652 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信