2011-07-25 146 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); public delegateClass Z630_Power = delegate(string Zone) Instance.SendIR(「sendir,」+ Zone +「,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的初始化和它的其他用途),我不能確定。