我使用了WCL BT库的包装器。由于应用程序是在.NET 4中,而我们对包装器的许可证是在.NET 2中,因此这是一个草率的解决方法。
只要useLegacyV2RuntimeActivationPolicy
打开,将此包装器与.NET 4 WPF应用程序一起使用即可正常工作。有关此问题的更多信息here。触发OnDiscoveryComplete事件大约需要22秒。
但是当使用与ASP NET MVC 3应用程序相同的包装器时,库中的OnDiscoveryComplete事件永远不会被触发。谁知道为什么?
在WPF应用程序上的buttonClickedEvent和MVC应用程序上的AsyncController上的SearchAsync操作上调用包装器。
相关代码在这里:
调用包装器:
var wrapper = new Wrapper();
wrapper.Search();
打包机:
public Wrapper() {
_wclApi = new wclAPI();
_wclApi.Load();
_btDiscovery = new wclBluetoothDiscovery();
_btDiscovery.OnDiscoveryStarted += BtDiscoveryOnDiscoveryStarted;
_btDiscovery.OnDiscoveryComplete += BtDiscoveryOnDiscoveryComplete;
}
public void Search() {
var radios = new wclBluetoothRadios();
var ret = _btDiscovery.EnumRadios(radios);
if (ret == 0) {
wclBluetoothRadio radio = radios[0];
_btDiscovery.Discovery(radio, 0x15);
}
}
private void BtDiscoveryOnDiscoveryComplete(object sender, wclBluetoothDiscoveryCompleteEventArgs e) {
// handle devices found
}
答案 0 :(得分:0)
可能有wclBluetoothDiscovery
遇到但未正确暴露给您的异常。异步API中的常见错误是在发生错误事件时不通知调用者...正确的API设计将引发* Complete事件,但在查询完成的事件时会向您发出异常。