【发布时间】:2011-05-02 21:40:50
【问题描述】:
嗨,我对一般线程非常陌生。 我正在用 C# 开发类似蓝牙聊天的东西。 主要形式有 2 种可能性 1.更新BT设备列表并连接设备(工作正常) 2.监听连接到自己BT芯片的设备。
用于测试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 位数字。 第二个线程陷入无限循环(或看起来如此)并且应用程序崩溃。 我不知道问题出在哪里,也不知道如何解决。
//编辑
将方法更新为:
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 线程的开头,则创建表单并且似乎工作正常。
【问题讨论】:
标签: c# multithreading bluetooth chat