public IAsyncOperationToken BeginBurn(IBurningReceipt Receipt, FirmwareProject Project) { var token = new BurningAsyncOperationToken(new ProgressProxy()); RegisterCurrentOperation(token); Task.Factory.StartNew(() => Burn(Receipt, Project, token)); _burningStartedEvent.Publish(new BurningStartedEventArgs(token)); return token; }
private void Burn(IBurningReceipt Receipt, FirmwareProject Project, BurningAsyncOperationToken OperationToken) { using (_progressControllerFactory.CreateController(OperationToken.ProgressToken)) { try { Receipt.Burn(Project, OperationToken.ProgressToken, OperationToken.CancellationToken); OperationToken.Success(); } catch (CreateImageException exception) { OnException("Не удалось составить образ для прошивки", OperationToken, exception.InnerException, Project, Receipt); } catch (BurningException exception) { OnException("Не удалось прошить устройство", OperationToken, exception.InnerException, Project, Receipt); } } }
private void OnException(string ExceptionHeader, BurningAsyncOperationToken OperationToken, Exception Exc, FirmwareProject Project, IBurningReceipt Receipt) { if (!_exceptionSuppressors.Any(s => s(Exc))) _exceptionService.PublishException(ExceptionHeader, Exc, Project, Receipt); OperationToken.Error(Exc); }
private void RegisterCurrentOperation(BurningAsyncOperationToken token) { lock (_currentOperations) { _currentOperations.Add(token); } token.RunWhenCompleated(s => { lock (_currentOperations) { _currentOperations.Remove(token); } }); }