Я использую BluetoothClient в фоновом потоке для опроса клиента BT и подключаюсь туда. код моего потока выглядит примерно так:32feet.NET не переподключиться после перехода на MS Surface 2 tablet
while (true)
{
try
{
using (var client = new BluetoothClient { InquiryLength = TimeSpan.FromSeconds(INQUIRY_MAX_DURATION)})
{
var curAddr = ...;
var ep = new BluetoothEndPoint(curAddr, BluetoothService.SerialPort);
client.Connect(ep);
if (client.Connected)
{
using(var stream = client.GetStream())
{
try
{
//Do stuff on stream
}
catch(IOException) { }
}
}
}
}
catch (PlatformNotSupportedException)
{
Thread.Sleep(STACK_NOT_FOUND_RETRY_INTERVAL);
}
catch (SocketException ex)
{
Thread.Sleep(CONNECTION_FAILED_RETRY_INTERVAL);
}
}
Это подключить и правильно работать на большинстве компьютеров, в том числе MS Surface с окнами 8.1 Pro до тех пор, как он не переходит в режим ожидания. Если я отключу поверхность и оставлю ее в покое некоторое время, чтобы она вступила в приостановку, после включения всех попыток Connect() выбрасывается исключение SocketException, поскольку это неверно. Он восстанавливается только после закрытия и перезапуска приложения.
Это условие НЕ происходит, если я устанавливаю режим воздушного судна или вытаскиваю Bluetooth-ключ на ПК, похоже, происходит только после приостановки планшета. Кажется, не имеет значения, ввела ли система приостановление в подключенном или отключенном состоянии.
Что можно сделать, чтобы избежать этого состояния или восстановить его правильно?
EDIT: API нюхают показывает, что ошибка «WSAEINVAL» постоянно брошенные неуправляемым функции WSAConnect.