public async Task <HardwareStaticData> ReadHardwareStaticDataAsync(WorkstationMonitorServiceClient client) { return(await client.ReadHardwareStaticDataAsync()); }
public IAsyncCommand CreateHardwareStaticDataCommand( WpfObservableRangeCollection <ProcessorStatic> processorStatic, WpfObservableRangeCollection <ProcessorCache> processorCache, WpfObservableRangeCollection <Memory> memoryItems, WpfObservableRangeCollection <BaseBoard> baseBoard, WpfObservableRangeCollection <VideoController> videoController, WpfObservableRangeCollection <NetworkAdapter> networkAdapter, WpfObservableRangeCollection <PnPEntity> pnPEntity, WpfObservableRangeCollection <CDROMDrive> cDROMDrive, WpfObservableRangeCollection <Fan> fan, WpfObservableRangeCollection <Printer> printer, WpfObservableRangeCollection <Battery> battery, WpfObservableRangeCollection <Storage> storage) { return(new AsyncCommand <HardwareStaticData>(async(cancellationToken) => { WorkstationMonitorServiceClient workstationMonitorServiceClient = null; HardwareStaticData result = null; try { workstationMonitorServiceClient = await this.wcfClient.GetNewWorkstationMonitorServiceClient(); result = await Task.Run <HardwareStaticData>(() => workstationMonitorServiceClient.ReadHardwareStaticDataAsync()) .WithCancellation(cancellationToken) // Following statements will be processed in the same thread, won't use caught context (UI) .ConfigureAwait(false); if (cancellationToken.IsCancellationRequested) { workstationMonitorServiceClient.Abort(); } else { workstationMonitorServiceClient.Close(); } if (result != null && !cancellationToken.IsCancellationRequested) { processorStatic.ReplaceRange(result.Processor, new ProcessorStaticComparer()); processorCache.ReplaceRange(result.ProcessorCache, new ProcessorCacheStaticComparer()); memoryItems.ReplaceRange(result.Memory, new MemoryStaticComparer()); baseBoard.ReplaceRange(result.BaseBoard, new BaseBoardStaticComparer()); videoController.ReplaceRange(result.VideoController, new VideoControllerStaticComparer()); networkAdapter.ReplaceRange(result.NetworkAdapter, new NetworkAdapterStaticComparer()); pnPEntity.ReplaceRange(result.PnPEntity, new PnPEntityStaticComparer()); cDROMDrive.ReplaceRange(result.CDROMDrive, new CDROMDriveStaticComparer()); fan.ReplaceRange(result.Fan, new FanStaticComparer()); printer.ReplaceRange(result.Printer, new PrinterStaticComparer()); battery.ReplaceRange(result.Battery, new BatteryStaticComparer()); storage.ReplaceRange(result.Storage); } } catch (InvalidOperationException ex) { this.messageSender.SendErrorMessage(ex.Message); // Rethrow exception in order to set correct Task state (Faulted) throw; } catch (EndpointNotFoundException) { this.messageSender.SendErrorMessageEndpointNotFound(); this.messageSender.SendCancelCommandMessage(this.wcfClient.MachineIdentifier); workstationMonitorServiceClient.Abort(); throw; } catch (TimeoutException) { this.messageSender.SendErrorMessageTimeout(); this.messageSender.SendCancelCommandMessage(this.wcfClient.MachineIdentifier); workstationMonitorServiceClient.Abort(); throw; } catch (CommunicationException ex) { this.messageSender.SendErrorMessage(ex.Message); this.messageSender.SendCancelCommandMessage(this.wcfClient.MachineIdentifier); workstationMonitorServiceClient.Abort(); throw; } return result; })); }