Я интегрируюсь с устройством PIN с API, содержащим асинхронные методы. Например, один из них называется 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;
}
}
Является ли это хорошим способом решения того или иного там лучшего решения?