Windows Mobile - 串行端口通信

时间:2009-10-07 22:15:42

标签: c# windows-mobile bluetooth

我必须通过串口进行通信。我现在正尝试通过2台设备进行蓝牙通信,而且无处可去。

我在设备上有一个应用程序(称为蓝牙资源管理器),允许我进行串行通信,它将通过蓝牙发送,使用Stonestreet One堆栈,以防您想知道:(

在设置中,我可以创建一个定义了COM端口的“服务”。

然后我尝试运行以下代码(我在一台设备上调用Write,在另一台设备上调用Read)。 BTExplorer在serialPort.Open()执行时启动配对应用程序。在那里我选择我想要使用的“服务”(串行端口1)。

serialPort.ReadLine()挂起,永不回归。 (我的意思是真的挂起。我必须热启动设备来杀死我的应用程序。结束进程/终止进程不起作用。)

以下是供参考的代码:

public void WriteSerial()
{
    SerialPort serialPort = new SerialPort("COM4");
    serialPort.Open();
    serialPort.WriteLine("Hello To The Other Side");
    serialPort.Close();
}

public void ReadSerial()
{
    SerialPort serialPort = new SerialPort("COM4");
    serialPort.Open();
    string output = serialPort.ReadLine();
    serialPort.Close();
    MessageBox.Show(output);
}

private void btnWrite_Click(object sender, EventArgs e)
{
    WriteSerial();
}

private void btnRead_Click(object sender, EventArgs e)
{
    ReadSerial();
}

如何使这个工作?

我正在使用带有MC70设备的Windows Mobile 5。蓝牙堆栈是Stonestreet One(遗憾的是不能改变)。使用C#Compact Framework .NET 3.5进行开发

1 个答案:

答案 0 :(得分:5)

API help says

  

默认情况下,ReadLine方法会   阻止直到收到一行。如果   这种行为是不可取的,设置了   ReadTimeout属性为任何非零值   强制ReadLine方法的值   如果一行是抛出一个TimeoutException   在港口没有。

...所以,如果你想避免它挂起,那就去做吧。

反正:

  • 你怎么知道这两个设备/端口相互连接(通过蓝牙)?
  • 您在调用Open方法之前是否设置了SerialPort属性(例如BaudRate等)?
  • 您首先调用的是ReadLine还是WriteLine? 而不是打开/写入/关闭和打开/读取/关闭,而不是做开放/打开/读取/写入/关闭/关闭?
  • 发件人调用BytesToRead后,接收者WriteLine属性返回了什么?
  • 您是否查看了存在的串口示例代码(根据Stonestreet One Bluetooth SDK FAQ

如果他们的SDK确实有示例程序,那么我建议您在更改示例程序之前和/或测试之前使用它(未更改)来验证您的测试设置(例如,验证您的设备是否正确连接)您自己的软件(使用您已使用其示例软件测试过的相同设备/测试设置)。