/// <summary> /// Запустить потоки линий связи и поток обмена данными со SCADA-Сервером /// </summary> private bool StartThreads() { // остановка потоков StopThreads(); try { // приём необходимых таблиц базы конфигурации от SCADA-Сервера bool fatalError = false; DataTable tblInCnl; DataTable tblKP; if (Settings.Params.ServerUse) { ServerComm = new ServerCommEx(Settings.Params, AppLog); if (!ReceiveBaseTables(out tblInCnl, out tblKP)) { fatalError = true; AppLog.WriteAction(string.Format(Localization.UseRussian ? "Запуск работы невозможен из-за проблем взаимодействия со SCADA-Сервером.{0}{1}" : "Unable to start operation due to SCADA-Server communication error.{0}{1}", Environment.NewLine, CommPhrases.RetryDelay), Log.ActTypes.Error); ServerComm.Close(); ServerComm = null; } } else { tblInCnl = null; tblKP = null; } if (!fatalError) { // настройка линий связи по базе конфигурации if (Settings.Params.ServerUse) { foreach (CommLine commLine in commLines) { commLine.Tune(tblInCnl, tblKP); } } // запуск потоков линий связи AppLog.WriteAction(Localization.UseRussian ? "Запуск линий связи" : "Start communication lines", Log.ActTypes.Action); lock (commLines) { foreach (CommLine commLine in commLines) { commLine.ServerComm = ServerComm; commLine.Start(); } linesStarted = true; } // запуск приёма команд AppLog.WriteAction(Localization.UseRussian ? "Запуск приёма команд" : "Start receiving commands", Log.ActTypes.Action); commandReader = new CommandReader(this); commandReader.StartThread(); } // запуск потока записи информации о работе приложения if (linesStarted) { infoThread = new Thread(new ThreadStart(WriteInfoExecute)); infoThread.Start(); } return(linesStarted); } catch (Exception ex) { AppLog.WriteAction((Localization.UseRussian ? "Ошибка при запуске работы: " : "Error starting operation: ") + ex.Message, Log.ActTypes.Exception); return(false); } finally { if (infoThread == null) { WriteInfo(); } } }
/// <summary> /// Запустить потоки линий связи и поток обмена данными со SCADA-Сервером /// </summary> private bool StartThreads() { // остановка потоков StopThreads(); try { // приём необходимых таблиц базы конфигурации от SCADA-Сервера bool fatalError = false; DataTable tblInCnl; DataTable tblKP; if (Settings.Params.ServerUse) { ServerComm = new ServerCommEx(Settings.Params, AppLog); if (!ReceiveBaseTables(out tblInCnl, out tblKP)) { fatalError = true; AppLog.WriteAction(string.Format(Localization.UseRussian ? "Запуск работы невозможен из-за проблем взаимодействия со SCADA-Сервером.{0}{1}" : "Unable to start operation due to SCADA-Server communication error.{0}{1}", Environment.NewLine, CommPhrases.RetryDelay), Log.ActTypes.Error); ServerComm.Close(); ServerComm = null; } } else { tblInCnl = null; tblKP = null; } if (!fatalError) { // настройка линий связи по базе конфигурации if (Settings.Params.ServerUse) { foreach (CommLine commLine in commLines) commLine.Tune(tblInCnl, tblKP); } // запуск потоков линий связи AppLog.WriteAction(Localization.UseRussian ? "Запуск линий связи" : "Start communication lines", Log.ActTypes.Action); lock (commLines) { foreach (CommLine commLine in commLines) { commLine.ServerComm = ServerComm; commLine.Start(); } linesStarted = true; } // запуск приёма команд AppLog.WriteAction(Localization.UseRussian ? "Запуск приёма команд" : "Start receiving commands", Log.ActTypes.Action); commandReader = new CommandReader(this); commandReader.StartThread(); } // запуск потока записи информации о работе приложения if (linesStarted) { infoThread = new Thread(new ThreadStart(WriteInfoExecute)); infoThread.Start(); } return linesStarted; } catch (Exception ex) { AppLog.WriteAction((Localization.UseRussian ? "Ошибка при запуске работы: " : "Error starting operation: ") + ex.Message, Log.ActTypes.Exception); return false; } finally { if (infoThread == null) WriteInfo(); } }