Привет, я очень новичок в темах вообще.
Я разрабатываю что-то вроде Bluetooth-чата в c #.
На основной форме есть 2 возможности
1. Обновление списка устройств BT и подключение к устройству (Работает нормально)
2. Прослушайте устройства, подключенные к собственному чипу BT.
для проверки работоспособности БТ отключен.
для # 2 я создал тему после загрузки формы.
private void MainForm_Load(object sender, EventArgs e)
{
incomingConnectionThread = new Thread(checkForConnection);
incomingConnectionThread.Start();
}
public void checkForConnection()
{
while (listening) //boolean which is always true
{
if (cargui == null)
{
cargui = new sendReceiveForm(null);
cargui.ShowDialog();
}
}
}
потому что прослушивание всегда верно, создается и отображается новая форма (новая sendReceiveForm).
новая форма содержит другой поток, который выполняется после загрузки новой формы
и имеет цикл, который проверяет поток, есть ли полученная информация.
private void CarGui_Load(object sender, EventArgs e)
{
thread = new Thread(receiveData);
thread.Start();
}
private void receiveData()
{
while (listening)
{
try
{
if (stream.ReadByte() != -1)
{
if (rtfReceiveWindow.InvokeRequired)
{
rtfReceiveWindow.Invoke(new rtfDelegate(receiveData));
}
else
{
rtfReceiveWindow.Text += stream.ReadByte().ToString();
}
}
}
catch
{
}
}
}
Поток во второй форме - это поток из простого .txt streamReader с 1 цифрой.
второй поток застрял в бесконечном цикле (или, кажется, так), и приложение вылетает.
У меня нет ни идеи, где проблема, ни как я могу ее исправить.
// EDIT
Обновлен метод до:
private void receiveData()
{
while (listening)
{
if (stream.ReadByte() != -1)
{
if (rtfReceiveWindow.InvokeRequired)
{
rtfReceiveWindow.Invoke(new rtfDelegate(receiveData));
}
else
{
rtfReceiveWindow.Text += stream.ReadByte().ToString();
}
}
}
}
но без разницы
// EDIT2
Дело в том, что он работает нормально до запуска 2 потока.
если я прокомментирую начало потока 2, форма будет создана и, кажется, будет работать нормально.