2016-06-30 5 views
0

こんにちはなぜこのコードが私を例外にするのだろうか。イベントの値が変更されました

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でだと思う....が、私は値では何も変更しない、私はローカル変数にコピーします。

誰でも私を助けることができますか?

Test_Onchange ForceClass = new Test_Onchange(); 
ForceClass.ValueChanged += new EventHandler(EventValueChanged); 

ForceClass.Value = RandVal; 

あなたはForceClassとValueClassを持っていない理由:このことについてどのように

+0

例外はありますか? – Martheen

+2

ようこそStackOverflowへ!何が例外がスローされたのか_where_を教えてください。例外に_message_があります。これは通常何がうまくいかなかったかを示し、_stack trace_はどこに通知します。 –

+1

[NullReferenceExceptionとは何か、それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) ) –

答えて

0

?そしてForceClassは常に、あなたがここに

Test_Onchange ValueClass = new Test_Onchange(); 
ValueClass.ValueChanged += new EventHandler(EventValueChanged); 

を型Test_Onchangeの新しいオブジェクトを作成しているが、イベントでは、あなたのグローバルオブジェクトのForceClassを使用している

0

NULLです。 ForeClassがインスタンス化されていないため、NullReferenceExceptionが発生します。 コードを次のように置き換えてください。

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);   
} 
+0

ありがとう!私は名前を変えましたが、どこにでもあるわけではありません...そして、私はマルチスレッドの問題に遭遇していました。 – Jablonovo

関連する問題