我正在将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
答案 0 :(得分:2)
您收到此错误是因为调用
后会立即处理channel
和hub
channel.StartListening();
using
是一种为您处理对象的便捷方式,在这种情况下,这是不可取的。有关详细信息,请参阅using Statement (C# Reference)。
尝试以下步骤来解决问题。 1.将通道和集线器声明为类的私有字段。 2.不要使用using
关键字。 3.处理hub
时,请务必处置channel
和AdductionAbductionFlexionView
。
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();
}
}