在Myo集线器初始化期间未触发调度程序

时间:2015-01-09 15:01:57

标签: c# wpf user-interface dispatcher myo

我正在将Myo臂带的初始化代码移植到WPF应用程序,该应用程序使用C#包装器http://goo.gl/HfwqQe与设备进行交互。

但是当我在用户控件后面的代码中的InitializeComponent();下添加初始化代码时,永远不会触发更新具有连接状态的文本框的行,this.Dispatcher.Invoke((Action)(() =>

我通过在调度程序代码之前的行上设置一个断点来调试它,这被称为hub.MyoConnected += (sender, e) =>,意味着Myo已连接,但是之后的dispatcher行更新了{{ 1}}永远不会被调用和跳过。

任何人都知道这可能导致什么原因?

我不确定为什么它不会将连接状态输出到文本框。之前的代码相同,但这是我正在使用的C#包装器的新版本。

控制台示例工作正常,http://goo.gl/RFHLym并输出到控制台的连接,但我不能让它输出到文本框的连接。

这是获取Myo arm乐队连接状态的完整代码:

statusTbx

1 个答案:

答案 0 :(得分:2)

您收到此错误是因为调用

后会立即处理channelhub
channel.StartListening();

using是一种为您处理对象的便捷方式,在这种情况下,这是不可取的。有关详细信息,请参阅using Statement (C# Reference)

尝试以下步骤来解决问题。 1.将通道和集线器声明为类的私有字段。 2.不要使用using关键字。 3.处理hub时,请务必处置channelAdductionAbductionFlexionView

public partial class AdductionAbductionFlexionView : UserControl
{
    IChannel channel;
    IHub hub;

    public AdductionAbductionFlexionView()
    {
        InitializeComponent();

        // create a hub that will manage Myo devices for us
        channel = Channel.Create(ChannelDriver.Create(ChannelBridge.Create()));
        hub = Hub.Create(channel);

        //set a bpoint here, gets triggered
        // listen for when the Myo connects
        hub.MyoConnected += (sender, e) =>
        {
            //set a bpoint here, doesn't get triggered
            this.Dispatcher.Invoke((Action)(() =>
            {
                statusTbx.Text = "Myo has connected! " + e.Myo.Handle;
                //Console.WriteLine("Myo {0} has connected!", e.Myo.Handle);
                e.Myo.Vibrate(VibrationType.Short);

            }));
        };

        // listen for when the Myo disconnects
        hub.MyoDisconnected += (sender, e) =>
        {
            this.Dispatcher.Invoke((Action)(() =>
            {
                statusTbx.Text = "Myo has disconnected!";
                //Console.WriteLine("Oh no! It looks like {0} arm Myo has disconnected!", e.Myo.Arm);
                e.Myo.Vibrate(VibrationType.Medium);
            }));
        };

        // start listening for Myo data
        channel.StartListening();
    }
}