情况是这样的,最近入职了新公司。项目赶的急刚入职第二天就接手了同事的项目。同事又在出差,然后在debug的时候刚好在线程里出发扫码枪然后返回字符串;问题就在这里出错了老是报未将对象引用到对象实例。
通讯用的是TCP/ip socket 套接字。
出错的片段就在下面的代码。
没有办法只能在进入循环前就提前声明
很奇怪吧thread换成Task.Factory.StartNew他又不报错了
总之做个记录吧
string val= frontScanner.ReadBarcode(PublicValue.Camerastart);
if (val is null)
{}
//在这里插入代码片
//这个读码的片段。这里说一下,这个是为防止套接字里有缓存,然后读出来的码不正确。作者就吃过这方面的亏
while (tcpClient.Available>0)
{
byte[] buffes = new byte[tcpClient.Available];
tcpClient.Receive(buffes);
Thread.Sleep(200);
}
呢
```csharp
public string ReadBarcode(string startstr)
{
try
{
while (tcpClient.Available>0)
{
byte[] buffes = new byte[tcpClient.Available];
tcpClient.Receive(buffes);
Thread.Sleep(200);
}
var ns = tcpClient.Send(Encoding.ASCII.GetBytes(startstr));
while (tcpClient.Available == 0)
{
Thread.Sleep(1000);
}
readBuffer = new byte[tcpClient.Available];
tcpClient.Receive(readBuffer);
return Encoding.ASCII.GetString(readBuffer).Replace("\0", "");;
}
catch (Exception ex)
{
PublicValue.Camera_Init = false;
return null;
}
}