public async Task <WcfResultInfo> ControlDevice(ProjectorControlServiceData serviceData) { var task = await DispatcherHelper.UIDispatcher.InvokeAsync(async() => { var mainViewModel = (MainViewModel)DataContext; var serialPortInfo = mainViewModel.ProjectorSerialPortInfos.FirstOrDefault(s => s.PortSignName == serviceData.PortSignName); if ((serialPortInfo != null) && !serialPortInfo.IsOpenSerialPort) { return(new WcfResultInfo { ErrorMsg = SendWcfCommandHelper.ErrorInfoForNotOpenSerialPort }); } var projector = serialPortInfo?.ProjectorInfos.FirstOrDefault(s => s.DeviceNumber == serviceData.DeviceNumber); if (projector != null) { bool result; if (serviceData.PowerOnOrOff) { result = await projector.PowerOn(); } else { result = await projector.PowerOff(); } return(new WcfResultInfo { Data = new[] { result.ToByte() } }); } return(new WcfResultInfo { ErrorMsg = SendWcfCommandHelper.ErrorInfoForNoDevices }); }); return(task.Result); }
public static async Task <WcfResultInfo> Send(ProjectorControlServiceData serviceData) { var sendWcfCommand = new SendWcfCommandEx(ProjectorDeviceService.GetProjectorDeviceService().WcfServiceAddress); sendWcfCommand.Error += SendWcfCommand_Error; sendWcfCommand.CommunicationError += SendWcfCommand_CommunicationError; sendWcfCommand.TimeoutError += SendWcfCommand_TimeoutError; var result = await sendWcfCommand.SendEx(ProjectorDeviceService.Key, serviceData.ToBytes()); sendWcfCommand.Error -= SendWcfCommand_Error; sendWcfCommand.CommunicationError -= SendWcfCommand_CommunicationError; sendWcfCommand.TimeoutError -= SendWcfCommand_TimeoutError; return(result); }