你好,我想知道为什么这段代码会让我成为例外。
namespace Test_Inotify
{
class Test_Onchange
{
private int value;
private object _lock = new object();
/*removed private object _lock;*/
public event System.EventHandler ValueChanged;
protected virtual void OnValueChange()
{
lock (_lock)
{
if (ValueChanged != null)
ValueChanged(this, EventArgs.Empty);
}
}
public int Value
{
get { return this.value; }
set
{
this.value = value;
OnValueChange();
}
}
}
}
表格
namespace Test_Inotify
{
public partial class Form1 : Form
{
Test_Onchange ValueClass ;//ForceValue removed;
public Form1()
{
InitializeComponent();
/* Test_Onchange removed*/ ValueClass = new Test_Onchange();
ValueClass.ValueChanged += new EventHandler(EventValueChanged);
for (int i = 0; i < 10; i++)
{
Random Rndvalue = new Random();
int RandVal = Rndvalue.Next(0, 100);
ValueClass.Value = RandVal;
System.Threading.Thread.Sleep(500);
}
}
private void EventValueChanged(object sender, EventArgs e)
{
int valueforce = ValueClass.Value; /*removedForceClass.Value;*/
MessageBox.Show("Event raised"+valueforce);
}
}
}
我认为它在EventValueChanged ....但我不修改值中的任何内容,我只将其复制到局部变量中。
任何人都可以帮助我吗?
答案 0 :(得分:0)
这个怎么样:
Test_Onchange ForceClass = new Test_Onchange();
ForceClass.ValueChanged += new EventHandler(EventValueChanged);
和
ForceClass.Value = RandVal;
为什么你有ForceClass和ValueClass?和ForceClass始终为NULL
答案 1 :(得分:0)
您正在创建一个类型为Test_Onchange的新对象
Test_Onchange ValueClass = new Test_Onchange();
ValueClass.ValueChanged += new EventHandler(EventValueChanged);
但是在这种情况下,您正在使用全局对象ForceClass。 您将获得NullReferenceException,因为您的ForeClass未实例化。 用以下代码替换您的代码:
ForeClass = new Test_Onchange();
ForeClass.ValueChanged += new EventHandler(EventValueChanged);
for (int i = 0; i < 10; i++)
{
Random Rndvalue = new Random();
int RandVal = Rndvalue.Next(0, 100);
ForeClass.Value = RandVal;
System.Threading.Thread.Sleep(500);
}