Windows phone 8 在windows phone 8中通过蓝牙从arduino接收数据

Windows phone 8 在windows phone 8中通过蓝牙从arduino接收数据,windows-phone-8,Windows Phone 8,我在研究开发WindowsPhone8蓝牙控制台时发现了这个示例()。除了TERMINATE函数外,这个示例工作得非常好。当我调用TERMINATE函数时,ReceiveMessages函数仍在尝试接收数据,但没有更多可用的套接字,它会生成system.exception。我尝试了很多变通方法,但我没有足够的C#经验,这是我的第一个应用程序。有人知道我如何解决这个问题,或者有更好的例子吗 我只做了1次修改: 我在这里找到了一个解决方案: 我只做了一些修改: public void Termi

我在研究开发WindowsPhone8蓝牙控制台时发现了这个示例()。除了TERMINATE函数外,这个示例工作得非常好。当我调用TERMINATE函数时,ReceiveMessages函数仍在尝试接收数据,但没有更多可用的套接字,它会生成system.exception。我尝试了很多变通方法,但我没有足够的C#经验,这是我的第一个应用程序。有人知道我如何解决这个问题,或者有更好的例子吗

我只做了1次修改:

我在这里找到了一个解决方案:

我只做了一些修改:

public void Terminate()
    {
        try
        {
            if (socket != null)
            {
                taskLoadLength.Cancel();
                taskLoadLength.Close();
                taskLoadMessage.Cancel();
                taskLoadMessage.Close();
                socket.Dispose();
                dataReadWorker.CancelAsync();
                dataReader.Dispose();
                dataWriter.Dispose(); 
                isInicialized = false;   
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }

private void ReceiveMessages(object sender, DoWorkEventArgs ev)
    {
        while (true)
        {
            try
            {
                // Read first byte (length of the subsequent message, 255 or less). 
                //uint sizeFieldCount = await dataReader.LoadAsync(1);
                taskLoadLength = dataReader.LoadAsync(1);
                taskLoadLength.AsTask().Wait();
                uint sizeFieldCount = taskLoadLength.GetResults();
                if (sizeFieldCount != 1)
                {
                    // The underlying socket was closed before we were able to read the whole data. 
                    return;
                }
                // Read the message. 
                uint messageLength = dataReader.ReadByte();
                taskLoadMessage = dataReader.LoadAsync(messageLength);
                taskLoadMessage.AsTask().Wait();
                uint actualMessageLength = taskLoadMessage.GetResults();
                //uint actualMessageLength = await dataReader.LoadAsync(messageLength);
                if (messageLength != actualMessageLength)
                {
                    // The underlying socket was closed before we were able to read the whole data. 
                    return;
                }
                // Read the message and process it.
                string message = dataReader.ReadString(actualMessageLength);
                MessageReceived(message);
            }
            catch (AggregateException ae)
            {
                MessageBox.Show(ae.Message);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
    }
public void Terminate()
    {
        try
        {
            if (socket != null)
            {
                taskLoadLength.Cancel();
                taskLoadLength.Close();
                taskLoadMessage.Cancel();
                taskLoadMessage.Close();
                socket.Dispose();
                dataReadWorker.CancelAsync();
                dataReader.Dispose();
                dataWriter.Dispose(); 
                isInicialized = false;   
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }

private void ReceiveMessages(object sender, DoWorkEventArgs ev)
    {
        while (true)
        {
            try
            {
                // Read first byte (length of the subsequent message, 255 or less). 
                //uint sizeFieldCount = await dataReader.LoadAsync(1);
                taskLoadLength = dataReader.LoadAsync(1);
                taskLoadLength.AsTask().Wait();
                uint sizeFieldCount = taskLoadLength.GetResults();
                if (sizeFieldCount != 1)
                {
                    // The underlying socket was closed before we were able to read the whole data. 
                    return;
                }
                // Read the message. 
                uint messageLength = dataReader.ReadByte();
                taskLoadMessage = dataReader.LoadAsync(messageLength);
                taskLoadMessage.AsTask().Wait();
                uint actualMessageLength = taskLoadMessage.GetResults();
                //uint actualMessageLength = await dataReader.LoadAsync(messageLength);
                if (messageLength != actualMessageLength)
                {
                    // The underlying socket was closed before we were able to read the whole data. 
                    return;
                }
                // Read the message and process it.
                string message = dataReader.ReadString(actualMessageLength);
                MessageReceived(message);
            }
            catch (AggregateException ae)
            {
                MessageBox.Show(ae.Message);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
    }