private void reiniciarThreadConexao() { // Ícone sem conexão ProcessIcon.ChangeIcon((int)ProcessIcon.ICONS.Red); logger.Warn("Retentando conexão com ModBus..."); // Interrompe as threads de produção dado que a conexão caiu pararThreads(); // Inicia a thread de tentativas de conexão. iniciarThreadConexao(); }
static void Main() { Assembly assembly = Assembly.GetExecutingAssembly(); var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0]; var appGuid = attribute.Value; using (Mutex mutex = new Mutex(false, "Global\\" + appGuid)) { bool interfaceStarted = false; // Show the system tray icon. using (ProcessIcon pi = new ProcessIcon()) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); if (!mutex.WaitOne(0, false)) { MessageBox.Show("Programa já em execução!"); return; } CheckAndTransmit checkAndTransmit = null; try { checkAndTransmit = new CheckAndTransmit(); checkAndTransmit.ProcessIcon = pi; pi.Display(checkAndTransmit); pi.ChangeIcon((int)ProcessIcon.ICONS.Red); checkAndTransmit.iniciarThreadConexao(); // Make sure the application runs! Application.Run(); } catch (Exception ex) { checkAndTransmit.LOGGER.Fatal("************* Não foi possível iniciar o processo *************"); checkAndTransmit.LOGGER.Fatal(ex.Message); } } } }
public void iniciarThreadConexao() { // Iniciando/Reiniciando travas. transmissionSemaphore = new Semaphore(1, 1); string enderecoModBus = modbusRegistry.obterModBusEndereco(); int portaModBus = modbusRegistry.obterModBusPorta(); ThreadConexao = new Thread(() => { bool conectado = false; databaseCheckerShouldRun = true; while (conectado == false && DatabaseCheckerShouldRun) { try { modbusClient = new ModbusClient(enderecoModBus, portaModBus); //Ip-Address and Port of Modbus-TCP-Server modbusClient.Connect(); //Connect to Server conectado = true; ProcessIcon.ChangeIcon((int)ProcessIcon.ICONS.Normal); } catch (Exception ex) { logger.Error("Erro ao conectar ao servidor: " + ex.Message); logger.Warn("Tentando novamente em 3 segundos..."); Thread.Sleep(3000); } } iniciarThreadPrincipal(); iniciarThreadHeartBeat(); ThreadConexao.Join(); }); ThreadConexao.Name = "Conexão"; ThreadConexao.Start(); }