我目前正在使用Visual Studio在C#中创建一个应用程序。我想创建一些代码,这样当一个变量的值为1时,就会执行一段代码。我知道我可以使用if语句,但问题是值将在异步过程中更改,因此从技术上讲,if语句可以在值更改之前被忽略。
是否可以创建一个事件处理程序,以便在变量值更改时触发事件?如果是这样,我该怎么做呢?
我完全有可能误解了if语句的工作原理!任何帮助都将不胜感激。
发布于 2011-04-30 22:25:49
在我看来,你是想创建一处房产。
public int MyProperty
{
get { return _myProperty; }
set
{
_myProperty = value;
if (_myProperty == 1)
{
// DO SOMETHING HERE
}
}
}
private int _myProperty;
这允许您在属性值发生更改时随时运行一些代码。如果你愿意,你可以在这里发起一个事件。
发布于 2011-05-01 05:13:48
.NET框架实际上提供了一个接口,您可以使用该接口在属性发生更改时通知订阅者: System.ComponentModel.INotifyPropertyChanged。此接口有一个事件PropertyChanged。它通常在WPF中用于绑定,但我发现它在业务层中作为标准化属性更改通知的一种方式很有用。
在线程安全方面,我会在setter中设置一个锁,这样您就不会遇到任何竞争条件。
以下是我在代码中的想法:):
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
}
}
}
希望这能对您有所帮助:)
发布于 2011-04-30 22:28:14
只需使用属性
int _theVariable;
public int TheVariable{
get{return _theVariable;}
set{
_theVariable = value;
if ( _theVariable == 1){
//Do stuff here.
}
}
}
https://stackoverflow.com/questions/5842339
复制相似问题