C# 使用32英尺的.Net(蓝牙)接收连续数据
我正在创建一个Windows窗体应用程序,它通过蓝牙连接到设备。我能够向设备发送命令,并持续接收数据。我面临的问题是无法在文本框中显示连续数据。文本框仅显示应用程序正在接收的第一行字符。这是我的密码:C# 使用32英尺的.Net(蓝牙)接收连续数据,c#,.net,winforms,bluetooth,32feet,C#,.net,Winforms,Bluetooth,32feet,我正在创建一个Windows窗体应用程序,它通过蓝牙连接到设备。我能够向设备发送命令,并持续接收数据。我面临的问题是无法在文本框中显示连续数据。文本框仅显示应用程序正在接收的第一行字符。这是我的密码: public delegate void updateDelegate(string text); private updateDelegate objDelegate; private SerialPort serialPort; public View() // constructor
public delegate void updateDelegate(string text);
private updateDelegate objDelegate;
private SerialPort serialPort;
public View() // constructor
{
InitializeComponent();
this.WindowState = FormWindowState.Normal;
this.StartPosition = FormStartPosition.CenterScreen;
this.objDelegate = new updateDelegate(getText);
serialPort = new SerialPort("COM12", 9600);
serialPort.Handshake = Handshake.None;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DtrEnable = true;
serialPort.RtsEnable = true;
}
连接按钮操作:
private void btnConnect_Click(object sender, EventArgs e)
{
if (listBox.SelectedItem != null)
{
lblProgress.Text = "";
btnStart.Enabled = true;
cBoxAvailablePorts.Enabled = cBoxAvailableBaudRates.Enabled = true;
try
{
int pos = listBox.SelectedIndex;
deviceInfo = array.ElementAt(pos);
if (pairDevice())
{
Thread thread = new Thread(() => connectThread());
thread.Start();
}
else
{
MessageBox.Show("Pair failed!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else
{
MessageBox.Show("Please connect to a device!");
}
}
螺纹作用
private void connectThread()
{
//BluetoothClient client = new BluetoothClient();
bc.BeginConnect(deviceInfo.DeviceAddress, serviceClass, this.connectCallBack, bc);
}
回调操作:
private void connectCallBack(IAsyncResult result)
{
//BluetoothClient client = (BluetoothClient)result.AsyncState;
try
{
if (bc.Connected)
{
MessageBox.Show("Connected!");
}
else
{
MessageBox.Show("Connection Failed!");
}
}
catch (Exception)
{
MessageBox.Show("Not able to identify Bluetooth devices! Please try again.!");
}
}
启动按钮操作:
这里我发送一个命令“S”。
在按钮操作中,我调用sendMessage(“S”)。
调用的函数如下所示:
public void sendMessage(string msg)
{
try
{
if (bc.Connected)
{
Stream stream = bc.GetStream();
stream.ReadTimeout = 1000;
StreamWriter streamWriter = new StreamWriter(stream);
streamWriter.WriteLine(msg);
streamWriter.Flush();
// Read operation
StreamReader streamReader = new StreamReader(stream);
string result = streamReader.ReadLine();
txtResult.Text = result;
}
else
{
MessageBox.Show("Sending failed!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我在循环中编写了StreamReader部分,它给了我套接字异常。
我还试图从串行端口获取数据,并使用DataReceived事件以防万一,但仍然没有帮助。
任何帮助都将不胜感激。
谢谢大家! 好的!我解决了这个问题。在使用32英尺库时没有遇到麻烦(尽管使用32英尺编写代码很有趣),我想通过串行端口进行通信。我将设备与我的笔记本电脑连接,并在我的笔记本电脑的蓝牙设置中了解了传出组件。双向通信只能通过传出组件完成,不能通过传入组件完成 假设输出组件是COM12,我设置的波特率是9600。 这是我的代码:
public delegate void updateDelegate(string text);
private updateDelegate objDelegate;
private SerialPort serialPort;
public View() // constructor
{
InitializeComponent();
this.WindowState = FormWindowState.Normal;
this.StartPosition = FormStartPosition.CenterScreen;
this.objDelegate = new updateDelegate(getText);
serialPort = new SerialPort("COM12", 9600);
serialPort.Handshake = Handshake.None;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DtrEnable = true;
serialPort.RtsEnable = true;
}
启动按钮动作
private void btnStart_Click(object sender, EventArgs e)
{
sendData("S");
}
//发送命令
public void sendData(string msg)
{
try
{
if (!serialPort.IsOpen)
{
serialPort.Open();
//serialPort.Close();
}
if (serialPort.IsOpen)
{
serialPort.Write(msg);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
//读取数据
public void readData()
{
try
{
serialPort.DataReceived += SerialPort_DataReceived;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string res = serialPort.ReadExisting();
Thread.Sleep(500);
txtResult.Invoke(this.objDelegate, new object[] {res});
}
public void getText(string text)
{
txtResult.Text = text;
}
我希望这能帮助别人!谢谢你