public bool EstablishConnectionToScanner(int maxTryCount, TimeSpan delay) { CodeContract.Requires(maxTryCount > 0); Type connectorClassType; try { connectorClassType = Type.GetType(_config.ScannerConnector.TypeName, true); } catch (Exception ex) { throw new Exception(string.Format( "Ошибка получения типа класса коннектора сканера по имени типа '{0}'", _config.ScannerConnector.TypeName), ex); } if (!connectorClassType.CanCastToType(typeof(ScannerConnector))) throw new Exception(string.Format( "Тип {0} должен быть унаследован от ScannerConnector", connectorClassType.FullName)); var scannerConnectorSettings = _config.ScannerConnector.Settings.ToNameValueCollection(); var tryCount = 0; while (true) { try { if (_scannerConnector != null) _scannerConnector.Dispose(); _scannerConnected = false; _scannerConnector = (ScannerConnector)Activator.CreateInstance(connectorClassType); _scannerConnector.Init(_config.ScannerConnector.BroadcastIPAddress, scannerConnectorSettings); _connectionDone.Reset(); _scannerConnector.Connect(this); if (!_connectionDone.WaitOne(TimeSpan.FromSeconds(10), false)) throw new Exception("Не дождались установки соединения со сканером"); Logger.LogInfo(Message.ScannerManagerConnected, _scanner.SerialNumber, _scanner.IPAddress); StartManageLampsThread(); return true; } catch (Exception ex) { if (tryCount >= maxTryCount) { Logger.LogError(Message.ScannerManagerCantConnect, ex, ++tryCount); return false; } Logger.LogWarning(Message.ScannerManagerCantConnect, ex, ++tryCount); Thread.Sleep(delay); } } }
public override void Dispose() { base.Dispose(); StopScanning(); Thread.Sleep(1000); if (_rollTextMachine != null) { _rollTextMachine.Dispose(); _rollTextMachine = null; } if (_scannerConnector != null) { SetLampsRegime(ScannerLampsRegime.BothOff); _scannerConnector.Dispose(); _scannerConnector = null; } GC.SuppressFinalize(this); }