2011-07-25 16 views
0

次のメソッド呼び出しが:矛盾した結果

GlobalCacheAdaptor.Instance.SendIR("sendir," + activeRoom[3] + ",1,40000,4,1,21,181,21,181,21,181,21,181,21,181,21,181,21,181,21,181,21,181,21,181,21,181,21,800" + Environment.NewLine); 

作品完全に私のC#アプリケーションの一部から呼び出され、残念ながら、同じメソッド呼び出しは失敗し、主張例外を返します私のアプリケーションの別の部分から呼び出されたときに "socket(_deviceSocket)はnullにはなれません"ということです。

public void SendIR(string message) 
{ 
    try 
     { 
      var stream = new NetworkStream(_deviceSocket); 
      var reader = new StreamReader(stream); 
      var writer = new StreamWriter(stream) {NewLine = "\r", AutoFlush = true}; 
      _deviceWriter = writer; 
      _detectedRelayModule = -1; 
      writer.WriteLine(message); 
      var readerThread = new Thread(ReaderThreadProc) {IsBackground = true}; 
      readerThread.Start(reader); 
     } 
catch (Exception e) 
     { 
      MessageBox.Show(e.GetBaseException().ToString()); 
     } 
} 

メソッド呼び出しがアプリケーション全体で一貫して機能するように、変更が必要なものについて私を適切な方向に向かわせてくれますか?

+0

あなたのコードからはわかりません。おそらく、あなたはマルチスレッドの問題があります。 '_deviceSocket'が' null'に設定されているかどうかを確認してください。多分、あなたをどこかに連れて行くでしょう。 –

+0

ダニエル - それはスレッドの問題であることが判明しました。スレッディングについてもっと読んだ後、私は匿名メソッドについて学びました。クラスに次のコードを追加した後: public delegate void DelegateClass(s​​tring Zone); 公共DelegateClass Z630_Power =デリゲート(文字列ゾーン) {Instance.SendIR( "sendir、" +ゾーン+」、1,40000,4,1,21,181,21,181,21,181,21,181,21,181,21,181,21,181,21,181、 21,181,21,181,21,181,21,800 "+ Environment.NewLine); }; 次の呼び出しでメソッドを実装できました。 GlobalCacheAdaptor.Instance.Z630_Power(activeRoom [3]);ありがとう。 – Bill

答えて

0

私の推測では、_deviceSocketは(おそらく)他のNetworkStreamによって閉鎖されていると思いますか? (System.Net.Sockets.NetworkStreamはIDisposableクラスです。)しかし、コードを追加しなくても(_deviceSocketの初期化と他の用途)、私は確信することはできません。