C# ReadAsync-线程已退出,代码为259
我的蓝牙连接有问题。这是无止境的连接,几秒钟后,它总是挂断在ReadAsync上,并显示以下信息: 线程0x19c已退出,代码为259(0x103)。 程序“[5612]TaskHost.exe”已退出,代码为0(0x0) 在此之后-设备的连接仍然有效(我看到设备上的连接二极管),但没有机会: 1) 再次连接到设备(连接仍然存在) 2) 从套接字/连接接收任何数据 它总是挂在这里:C# ReadAsync-线程已退出,代码为259,c#,multithreading,sockets,windows-phone-8,bluetooth,C#,Multithreading,Sockets,Windows Phone 8,Bluetooth,我的蓝牙连接有问题。这是无止境的连接,几秒钟后,它总是挂断在ReadAsync上,并显示以下信息: 线程0x19c已退出,代码为259(0x103)。 程序“[5612]TaskHost.exe”已退出,代码为0(0x0) 在此之后-设备的连接仍然有效(我看到设备上的连接二极管),但没有机会: 1) 再次连接到设备(连接仍然存在) 2) 从套接字/连接接收任何数据 它总是挂在这里: returnedBuffer = await
returnedBuffer =
await
socket.InputStream.ReadAsync(buffer.AsBuffer(), (uint)buffer.Length,
InputStreamOptions.Partial);
Modyfied代码来自32英尺样本:
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
var bdp = new BluetoothDevicePicker();
PeerInformation pi = await bdp.PickDeviceAsync();
if (pi != null)
{
var hn = new HostName(pi.HostName.RawName);
// do something with the device
ReadThread(hn);
}
}
private async void ReadThread(object host)
{
reading = true;
var socket = new StreamSocket();
socket.Control.KeepAlive = true;
socket.Control.NoDelay = false;
//socket.Control.QualityOfService = SocketQualityOfService.LowLatency;
IAsyncAction a = StreamSocketExtensions.ConnectAsync(socket, (HostName)host, RfcommServiceId.SerialPort);
await a;
var buffer = new byte[2048];
while (reading)
{
IBuffer returnedBuffer = null;
try
{
returnedBuffer =
await
socket.InputStream.ReadAsync(buffer.AsBuffer(), (uint)buffer.Length,
InputStreamOptions.Partial);
if (returnedBuffer != null)
{
string s = PrintByteArray(returnedBuffer.ToArray(), (int)returnedBuffer.Length);
if (!string.IsNullOrEmpty(s))
{
Dispatcher.BeginInvoke(new Action<string>(InsertMessage), s);
}
}
}
catch
{
}
}
socket.Dispose();
}
private async void按钮\u单击\u 1(对象发送方,RoutedEventArgs e)
{
var bdp=新的BluetoothDevicePicker();
PeerInformation pi=wait bdp.PickDeviceAsync();
如果(pi!=null)
{
var hn=新主机名(pi.HostName.RawName);
//用这个设备做些什么
读取线程(hn);
}
}
私有异步void ReadThread(对象主机)
{
阅读=正确;
var socket=新的StreamSocket();
socket.Control.KeepAlive=true;
socket.Control.NoDelay=false;
//socket.Control.QualityOfService=SocketQualityOfService.lowlatence;
IAsyncation a=StreamSocketExtensions.ConnectAsync(套接字,(主机名)主机,RfcommServiceId.SerialPort);
等待时机;
var buffer=新字节[2048];
边读
{
IBuffer returnedBuffer=null;
尝试
{
返回缓冲区=
等候
socket.InputStream.ReadAsync(buffer.AsBuffer(),(uint)buffer.Length,
InputStreamOptions.Partial);
if(returnedBuffer!=null)
{
字符串s=PrintByteArray(returnedBuffer.ToArray(),(int)returnedBuffer.Length);
如果(!string.IsNullOrEmpty)
{
Dispatcher.BeginInvoke(新操作(插入消息),s);
}
}
}
接住
{
}
}
socket.Dispose();
}
旁注:不要在文章标题中添加标签,而是添加签名编辑用户名。