2011-10-20 4 views
0

私はWCL BTライブラリへのラッパーを使用しています。アプリケーションは.NET 4にあり、ラッパーに必要なライセンスは.NET 2にあるため、これはちょっとした回避策です。mvc非同期コントローラで呼び出された場合、完全なイベントは発生しません

このラッパーを.NET 4 WPFアプリケーションで使用すると、が有効な限り正常に動作します。この詳細についてはhereをご覧ください。 OnDiscoveryCompleteイベントが発生するまでに約22秒かかります。

しかし、ASP .NET MVC 3アプリケーションで同じラッパーを使用すると、ライブラリのOnDiscoveryCompleteイベントは発生しません。なぜ誰も知っていますか?

ラッパーは、WPFアプリケーションではbuttonClickedEvent、MVCアプリケーションではAsyncControllerのSearchAsyncアクションで呼び出されます。

関連するコードはここにある:

var wrapper = new Wrapper(); 
wrapper.Search(); 

ラッパー::wclBluetoothDiscoveryが遭遇したが、適切にあなたにさらすされていないことを除いては、おそらく

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

あり

は、ラッパーを呼び出します。これは、非同期APIの一般的なバグで、悪いことが起きたときに呼び出し元に通知しません。適切なAPI設計では* Completeイベントを発生させますが、完了したイベントargを照会すると例外が発生します。

+0

行_btDiscovery.Discovery(radio、0x15);それはDiscoveryメソッドにはありません。たぶんコールバックに。 – dcarneiro

+0

@Daniel Discoveryメソッドが非同期(実際の作業を行うためにバックグラウンドプロセスを開始してすぐに戻る)の場合、非表示の例外はそのバックグラウンドプロセスにあり、0の戻り値を得た後に発生します。 –

+0

@Danielまた、なぜあなたは、Bluetoothの発見をしているWebアプリケーションを持っていますか? –

関連する問題