在mvc异步控制器中调用时,完成事件不会触发

时间:2011-10-20 16:41:17

标签: asp.net-mvc bluetooth

我使用了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
}

1 个答案:

答案 0 :(得分:0)

可能有wclBluetoothDiscovery遇到但未正确暴露给您的异常。异步API中的常见错误是在发生错误事件时不通知调用者...正确的API设计将引发* Complete事件,但在查询完成的事件时会向您发出异常。