尝试通过C#中的蓝牙发送字节时出现NullReferenceException

时间:2014-02-26 16:45:57

标签: c# windows-phone-8 bluetooth

这是我第一次使用C#进行蓝牙连接。我试图通过蓝牙从C#编写的应用程序发送字节(数据类型)。

这是我的代码:

public class ConnectionManager
{
    private StreamSocket socket;

        private DataWriter dataWriter;

        public void Initialize()
        {
        socket = new StreamSocket();
        }

        public void Terminate()
        {
            if (socket != null)
                {
                    socket.Dispose();
                }
        }

        public async void connect(HostName hostName)
        {
                if (socket != null)
                {
                    await socket.ConnectAsync(hostName, "1");
                    dataWriter = new DataWriter(socket.OutputStream);
                }
        }

        //sending data via Bluetooth
        public void sendCommand(byte command)
        {
                dataWriter.WriteByte(command);
        }
}

private ConnectionManager connectionManager;

// Constructor
public MainPage()
{
    InitializeComponent();
        connectionManager = new ConnectionManager();
}

private async void AppToDevice()
{
    PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "";
        var pairedDevices = await PeerFinder.FindAllPeersAsync();

        if (pairedDevices.Count == 0)
        {
            Debug.WriteLine("No devices found.");
        }
        else
        {
            foreach (var pairedDevice in pairedDevices)
                {
                        if (pairedDevice.DisplayName == "HC-06")
                        {
                            connectionManager.connect(pairedDevice.HostName);
                            continue;
                        }
                }
        }
}

private void send_Click(object sender, RoutedEventArgs e)
{
    byte command = Convert.ToByte(commandTextBox.Text);
        connectionManager.sendCommand(command);
}

private void connect_Click(object sender, RoutedEventArgs e)
{
    AppToDevice();
}

当我在commandTextBox中输入一些值(例如1或2)并点击发送按钮应用程序崩溃时。这是错误消息: TestBluetooth.DLL中发生了'System.NullReferenceException'类型的异常,但未在用户代码中处理

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

听起来像是一个非常基本的错误。某些对象为null。当您尝试访问对象为null的方法或属性时,会发生这种情况。

故障排除:

  • 检查错误的堆栈跟踪。它说失败的地方。
  • 调试时打开所有异常的中断,以便您可以看到它确实失败的位置,并查看哪个对象为空。
  • 如果你不能调试它,在你拥有的每个方法的所有代码周围添加一个try / catch,并使用MessageBox.Show(ex.ToString())在stacktrace失败时显示完整错误。
  • 如果第三方dll中发生错误,请确保在Visual Studio中的“选项”中关闭“调试” - >“启用我的代码”。
  • 下载并安装Red Gate的Reflector,如果它在您的代码之外失败并且您没有它的来源。 Reflector将“提取”DLL的代码,并向您显示它失败的行(或者我相信它确实如此)。

如果您收到错误消息“未在用户代码中处理”,则表示抛出了异常,并且您未通过try / catch处理。我有一个关于你在那里的异步方法。

如果我玩线程,我总是在线程代码中尝试/捕获我的所有代码。我建议在AppToDevice()方法中添加try / catch。同时为所有表单事件添加它。向用户显示错误消息或处理错误并隐藏用户的错误。

检查这些:
Best Practice for Exception Handling in a Windows Forms Application?
Exception handling in threads