private IObservable <PnpEventArgs> CreateWhenPnp() { return(Observable.FromEvent( (Action <PnpEventArgs> handler) => new _ICoreScannerEvents_PNPEventEventHandler( delegate(Int16 eventType, ref String data) { handler(PnpEventArgs.Parse(eventType, data)); }), handler => this.coreScanner.PNPEvent += handler, handler => this.coreScanner.PNPEvent -= handler)); }
/// <summary> /// /// </summary> /// <param name="eventType"></param> /// <param name="outXml"></param> /// <returns></returns> public static PnpEventArgs Parse(Int16 eventType, String outXml) { PnpEventArgs eventArgs = new PnpEventArgs(); XElement argXml = XDocument .Parse(outXml) .Elements("outArgs") .SelectMany(outArgs => outArgs .Elements("arg-xml")) .FirstOrDefault(); Int32 statusValue = argXml .Elements("status") .Select(status => status.Value.ToInt32()) .FirstOrDefault(); XElement scannerInfo = argXml .Elements("scanners") .SelectMany(scanners => scanners .Elements("scanner")) .FirstOrDefault(); eventArgs.eventType = (PnpEventType)eventType; eventArgs.scannerInfo = ScannerInfo.Parse(scannerInfo.ToString()); return(eventArgs); }