Хорошо, значит, ваша проблема try
/ catch
не покрывает правильную область, должна выглядеть следующим образом:
void BluetoothClientConnectCallback(IAsyncResult result)
{
try
{
BluetoothClient client = (BluetoothClient)result.AsyncState;
Stream stream;
client.EndConnect(result);
stream = client.GetStream();
stream.ReadTimeout = 1000;
while (true)
{
while (!ready) ;
message = Encoding.ASCII.GetBytes("{");
stream.Write(message, 0, 1);
ready = false;
}
}
catch (System.Net.Sockets.SocketException e)
{
MessageBox.Show($"Unable to connect to device with message:\r\n{e.Message}", "Error",
MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
catch (Exception ex)
{
//general exception catch, handle or ignore, but best is to log
}
}
Если вы хотите «скрыть» ошибку, вам нужно иметьпустой улов, но это никогда не рекомендуется
Возможно, необходимо некоторое чтение по try / catch, ознакомьтесь с здесь
Также стоит упомянуть, при использовании Streams
передовой опытиспользовать using
, чтобы убедиться, что он расположен правильно и не вызывает утечку памяти, например:
void BluetoothClientConnectCallback(IAsyncResult result)
{
try
{
BluetoothClient client = (BluetoothClient)result.AsyncState;
client.EndConnect(result);
using (var stream = client.GetStream())
{
stream.ReadTimeout = 1000;
while (true)
{
while (!ready) ;
message = Encoding.ASCII.GetBytes("{");
stream.Write(message, 0, 1);
ready = false;
}
}
}
catch (System.Net.Sockets.SocketException e)
{
MessageBox.Show($"Unable to connect to device with message:\r\n{e.Message}", "Error",
MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
catch (Exception ex)
{
//general exception catch, handle or ignore, but best is to log
}
}
Также приведены некоторые советы по обработке исключений из другого сообщения SO здесь