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());
}
}
會有人親切地引導我在正確的方向,以什麼需要修改,以便該方法調用整個應用程序都能正常工作?
從代碼中無法分辨出來。最有可能的是,你有一個多線程問題。檢查'_deviceSocket'是否設置爲'null'。也許它會把你帶到某個地方。 –
丹尼爾 - 它確實是一個線程問題。在閱讀了關於線程的更多信息之後,我瞭解了匿名方法。將以下代碼添加到類後: public delegate void DelegateClass(string 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