Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用32英尺的.Net(蓝牙)接收连续数据_C#_.net_Winforms_Bluetooth_32feet - Fatal编程技术网

C# 使用32英尺的.Net(蓝牙)接收连续数据

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

我正在创建一个Windows窗体应用程序,它通过蓝牙连接到设备。我能够向设备发送命令,并持续接收数据。我面临的问题是无法在文本框中显示连续数据。文本框仅显示应用程序正在接收的第一行字符。这是我的密码:

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;
    }
我希望这能帮助别人!谢谢你