私は非同期メソッドを含むAPIを持つPINデバイスと統合しています。たとえば、それらのうちの1つはGetStatusと呼ばれ、DeviceStateChangedEventを渡した状態をパラメータとして送出します。同期ラッパーを非同期メソッドに置く
私はインターフェイス上でGetStatusを呼び出すと、そのデータを渡すためにイベントを発生させるのではなく、実際にステータスを返すように、非同期ではないインターフェイスを使用したいと考えています。
public class MSRDevice
{
StatusInfo _status;
bool _stateChangedEventCompleted = false;
IPAD _ipad; // <-- the device
public MSRDevice()
{
//Initialize device, wire up events, etc.
}
public StatusInfo GetStatus()
{
_ipad.GetStatus() // <- raises StatusChangedEvent
while(!_stateChangedEventCompleted);
_stateChangedEventCompleted = false;
return _status;
}
void StateChangedEvent(object sender, DeviceStateChangeEventArgs e)
{
_status = e.StatusInfo;
}
}
が、これはそこよりよい解決策を、このまたはこれに対処するための良い方法です:
私はこのような何かを行うことができます思ってい?
を彼らが理由で非同期です:。好ましくは、あなたは(あなたのケースでは、
StatusChangedEvent
)該当するイベントが発生した際に同期させるために、このようWaitHandle
クラスとして、シグナリングメカニズムを使用する必要があります待つことができますか? –'DeviceStateChangedEvent'イベントは' GetStatus'の呼び出しに関して同期していますか?明らかに、これはイベントの可能なシーケンスです: 'GetStatus'、' GetStatus'、 'DeviceStateChangedEvent'、' DeviceStateChangedEvent' –