首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当变量的值发生变化时,如何触发事件?

当变量的值发生变化时,如何触发事件?
EN

Stack Overflow用户
提问于 2011-04-30 22:21:31
回答 5查看 222.5K关注 0票数 111

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

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-30 22:25:49

在我看来,你是想创建一处房产。

代码语言:javascript
复制
public int MyProperty
{
    get { return _myProperty; }
    set
    {
        _myProperty = value;
        if (_myProperty == 1)
        {
            // DO SOMETHING HERE
        }
    }
}

private int _myProperty;

这允许您在属性值发生更改时随时运行一些代码。如果你愿意,你可以在这里发起一个事件。

票数 139
EN

Stack Overflow用户

发布于 2011-05-01 05:13:48

.NET框架实际上提供了一个接口,您可以使用该接口在属性发生更改时通知订阅者: System.ComponentModel.INotifyPropertyChanged。此接口有一个事件PropertyChanged。它通常在WPF中用于绑定,但我发现它在业务层中作为标准化属性更改通知的一种方式很有用。

在线程安全方面,我会在setter中设置一个锁,这样您就不会遇到任何竞争条件。

以下是我在代码中的想法:):

代码语言:javascript
复制
public class MyClass : INotifyPropertyChanged
{
    private object _lock;

    public int MyProperty
    {
        get
        {
            return _myProperty;
        }
        set
        {
            lock(_lock)
            {
                //The property changed event will get fired whenever
                //the value changes. The subscriber will do work if the value is
                //1. This way you can keep your business logic outside of the setter
                if(value != _myProperty)
                {
                    _myProperty = value;
                    NotifyPropertyChanged("MyProperty");
                }
            }
        }
    }

    private NotifyPropertyChanged(string propertyName)
    {
        //Raise PropertyChanged event
    }
    public event PropertyChangedEventHandler PropertyChanged;
}


public class MySubscriber
{
    private MyClass _myClass;        

    void PropertyChangedInMyClass(object sender, PropertyChangedEventArgs e)
    {
        switch(e.PropertyName)
        {
            case "MyProperty":
                DoWorkOnMyProperty(_myClass.MyProperty);
                break;
        }
    }

    void DoWorkOnMyProperty(int newValue)
    {
        if(newValue == 1)
        {
             //DO WORK HERE
        }
    }
}

希望这能对您有所帮助:)

票数 45
EN

Stack Overflow用户

发布于 2011-04-30 22:28:14

只需使用属性

代码语言:javascript
复制
int  _theVariable;
public int TheVariable{
  get{return _theVariable;}
  set{
    _theVariable = value; 
    if ( _theVariable == 1){
      //Do stuff here.
    }
  }
}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5842339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档