示例#1
0
        /// <summary>
        /// Does the initialize.
        /// </summary>
        public override void doInit()
        {
            try
            {
                if (eqpt == null)
                {
                    return;
                }
                event_id       = "EQTcpIpMapAction_" + eqpt.VEHICLE_ID;
                tcpipAgentName = eqpt.TcpIpAgentName;
                //======================================連線狀態=====================================================
                RegisteredTcpIpProcEvent();
                ITcpIpControl.addTcpIpConnectedHandler(bcfApp, tcpipAgentName, Connection);
                ITcpIpControl.addTcpIpDisconnectedHandler(bcfApp, tcpipAgentName, Disconnection);

                ITcpIpControl.addTcpIpReplyTimeOutHandler(bcfApp, tcpipAgentName, ReplyTimeOutHandler);
                ITcpIpControl.addTcpIpSendErrorHandler(bcfApp, tcpipAgentName, SendErrorHandler);
                eqpt.addEventHandler(event_id
                                     , BCFUtility.getPropertyName(() => eqpt.ObstacleStatus)
                                     , (s1, e1) => { whenObstacleStatusChange(); });
                eqpt.addEventHandler(event_id
                                     , BCFUtility.getPropertyName(() => eqpt.BlockingStatus)
                                     , (s1, e1) => { whenBlockFinish(); });
                eqpt.addEventHandler(event_id
                                     , BCFUtility.getPropertyName(() => eqpt.PauseStatus)
                                     , (s1, e1) => { whenPauseFinish(); });
            }
            catch (Exception ex)
            {
                scApp.getBCFApplication().onSMAppError(0, "EQTcpIpMapAction doInit");
                logger.Error(ex, "Exection:");
            }
        }
        /// <summary>
        /// Removes the sheet by identifier.
        /// </summary>
        /// <param name="sheet_id">The sheet_id.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        public bool removeSheetByID(string sheet_id)
        {
            Boolean rtnCode = sheetList.removeSheetByID(sheet_id);

            OnPropertyChanged(BCFUtility.getPropertyName(() => this.SheetList));
            return(rtnCode);
        }
        /// <summary>
        /// Clears the lot information.
        /// </summary>
        public void clearLotInfo()
        {
            ALOT lot = new ALOT();

            BCFUtility.setValueToPropety(ref lot, ref lotItem);
            OnPropertyChanged(BCFUtility.getPropertyName(() => this.LotItem));
        }
示例#4
0
 /// <summary>
 /// Adds the alarm his.
 /// </summary>
 /// <param name="alarm">The alarm.</param>
 public virtual void addAlarmHis(ALARM alarm)
 {
     lock (alarmLock)
     {
         alarmList.Add(alarm);
         OnPropertyChanged(BCFUtility.getPropertyName(() => this.AlarmList));
     }
 }
示例#5
0
 /// <summary>
 /// Resets the lot list.
 /// </summary>
 /// <param name="dbLotList">The database lot list.</param>
 public virtual void resetLotList(List <ALOT> dbLotList)
 {
     lock (lotLock)
     {
         lotList.Clear();
         lotList.AddRange(dbLotList);
         OnPropertyChanged(BCFUtility.getPropertyName(() => this.LotList));
     }
 }
示例#6
0
 /// <summary>
 /// Resets the alarm his.
 /// </summary>
 /// <param name="dbAlarmList">The database alarm list.</param>
 public virtual void resetAlarmHis(List <ALARM> dbAlarmList)
 {
     lock (alarmLock)
     {
         alarmList.Clear();
         alarmList.AddRange(dbAlarmList);
         OnPropertyChanged(BCFUtility.getPropertyName(() => this.AlarmList));
     }
 }
示例#7
0
 private void init()
 {
     //註冊監聽事件
     commonInfo.addEventHandler(HandlerID, BCFUtility.getPropertyName(() => commonInfo.MPCTipMsgList),
                                (s1, e1) => refreshTable());
     //取得MPC Tip Messages,並載入到Tip Message DGV
     //this.m_TipMsgDGV.DataSource
     dataBS.DataSource      = commonInfo.MPCTipMsgList;
     m_TipMsgDGV.DataSource = dataBS;
     dataBS.ResetBindings(false);
 }
示例#8
0
 public void addMPCTipMsg(MPCTipMessage mpcTipMsg)
 {
     lock (mpcTipMsgList)
     {
         if (mpcTipMsgList.Count > MAX_MPC_TIP_MSG_COUNT)
         {
             mpcTipMsgList.RemoveAt(mpcTipMsgList.Count - 1);
         }
         mpcTipMsgList.Insert(0, mpcTipMsg);
         OnPropertyChanged(BCFUtility.getPropertyName(() => this.MPCTipMsgList));
     }
 }
示例#9
0
        /// <summary>
        /// Removes the sheet by identifier.
        /// </summary>
        /// <param name="sheet_id">The sheet_id.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        public virtual bool removeSheetByID(string sheet_id)
        {
            ASHEET sheet = sheetRecordList.Where(s => s.SHT_ID.Trim() == sheet_id.Trim()).SingleOrDefault();

            if (sheet == null)
            {
                return(false);
            }
            sheetRecordList.Remove(sheet);
            OnPropertyChanged(BCFUtility.getPropertyName(() => this.SheetRecordList));
            return(true);
        }
示例#10
0
        /// <summary>
        /// Removes the lot by identifier.
        /// </summary>
        /// <param name="lot_id">The lot_id.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        public virtual bool removeLotByID(string lot_id)
        {
            ALOT lot = lotList.Where(l => l.LOT_ID.Trim() == lot_id.Trim()).SingleOrDefault();

            if (lot == null)
            {
                return(false);
            }
            lotList.Remove(lot);
            OnPropertyChanged(BCFUtility.getPropertyName(() => this.lotList));
            return(true);
        }
示例#11
0
        /// <summary>
        /// Upadtes the lot.
        /// </summary>
        /// <param name="inputLot">The input lot.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        public virtual bool upadteLot(ALOT inputLot)
        {
            ALOT lot = lotList.Where(l => l.LOT_ID.Trim() == inputLot.LOT_ID.Trim()).SingleOrDefault();

            if (lot == null)
            {
                return(false);
            }
            lotList.Remove(lot);
            lotList.Add(inputLot);
            OnPropertyChanged(BCFUtility.getPropertyName(() => this.lotList));
            return(true);
        }
        public void setMonitorVehicle(string vh_id)
        {
            lock (predictPathHandler)
            {
                if (InObservationVh != null)
                {
                    InObservationVh.removeEventHandler(predictPathHandler);
                }

                resetSpecifyRail();
                resetSpecifyAdr();
                if (!BCFUtility.isEmpty(vh_id))
                {
                    InObservationVh = scApp.getEQObjCacheManager().getVehicletByVHID(vh_id);

                    changePredictPathByInObservation();

                    InObservationVh.addEventHandler(predictPathHandler
                                                    , BCFUtility.getPropertyName(() => InObservationVh.VhExcuteCMDStatusChangeEvent)
                                                    , (s1, e1) => { changePredictPathByInObservation(); });
                    InObservationVh.addEventHandler(predictPathHandler
                                                    , BCFUtility.getPropertyName(() => InObservationVh.VhStatusChangeEvent)
                                                    , (s1, e1) => { changePredictPathByInObservation(); });

                    cmb_Vehicle.Text = vh_id;
                    VehicleObjToShow veicleObjShow = scApp.getEQObjCacheManager().CommonInfo.ObjectToShow_list.Where(o => o.VEHICLE_ID == vh_id).FirstOrDefault();
                    if (veicleObjShow != null)
                    {
                        int selectIndex = scApp.getEQObjCacheManager().CommonInfo.ObjectToShow_list.IndexOf(veicleObjShow);
                        if (selectIndex >= 0)
                        {
                            if ((dgv_vhStatus.SelectedRows.Count > 0 && dgv_vhStatus.SelectedRows[0].Index != selectIndex) ||
                                dgv_vhStatus.SelectedRows.Count == 0)
                            {
                                dgv_vhStatus.Rows[selectIndex].Selected      = true;
                                dgv_vhStatus.FirstDisplayedScrollingRowIndex = selectIndex;
                            }
                        }
                    }
                }
                else
                {
                    if (dgv_vhStatus.SelectedRows.Count > 0)
                    {
                        dgv_vhStatus.SelectedRows[0].Selected = false;
                    }
                    cmb_Vehicle.Text = string.Empty;
                }
            }
        }
        public virtual void start(SCApplication _app)
        {
            scApp     = _app;
            reportBLL = _app.ReportBLL;
            lineBLL   = _app.LineBLL;
            line      = scApp.getEQObjCacheManager().getLine();

            line.addEventHandler(nameof(LineService), nameof(line.Currnet_Park_Type), PublishLineInfo);
            line.addEventHandler(nameof(LineService), nameof(line.Currnet_Cycle_Type), PublishLineInfo);
            line.addEventHandler(nameof(LineService), nameof(line.Secs_Link_Stat), PublishLineInfo);
            line.addEventHandler(nameof(LineService), nameof(line.Redis_Link_Stat), PublishLineInfo);
            line.addEventHandler(nameof(LineService), nameof(line.DetectionSystemExist), PublishLineInfo);
            line.addEventHandler(nameof(LineService), nameof(line.IsEarthquakeHappend), PublishLineInfo);
            line.addEventHandler(nameof(LineService), nameof(line.IsAlarmHappened), PublishLineInfo);

            line.addEventHandler(nameof(LineService), nameof(line.HasSeriousAlarmHappend), CheckLightAndBuzzer);
            line.addEventHandler(nameof(LineService), nameof(line.HasWarningHappend), CheckLightAndBuzzer);
            //line.addEventHandler(nameof(LineService), nameof(line.CurrntVehicleModeAutoRemoteCount), PublishLineInfo);
            //line.addEventHandler(nameof(LineService), nameof(line.CurrntVehicleModeAutoLoaclCount), PublishLineInfo);
            //line.addEventHandler(nameof(LineService), nameof(line.CurrntVehicleStatusIdelCount), PublishLineInfo);
            //line.addEventHandler(nameof(LineService), nameof(line.CurrntVehicleStatusErrorCount), PublishLineInfo);
            //line.addEventHandler(nameof(LineService), nameof(line.CurrntCSTStatueTransferCount), PublishLineInfo);
            //line.addEventHandler(nameof(LineService), nameof(line.CurrntCSTStatueWaitingCount), PublishLineInfo);
            //line.addEventHandler(nameof(LineService), nameof(line.CurrntHostCommandTransferStatueAssignedCount), PublishLineInfo);
            //line.addEventHandler(nameof(LineService), nameof(line.CurrntHostCommandTransferStatueWaitingCounr), PublishLineInfo);
            line.LineStatusChange += Line_LineStatusChange;

            line.LongTimeNoCommuncation += Line_LongTimeNoCommuncation;
            line.TimerActionStart();
            //Section 的事務處理
            List <ASECTION> sections = scApp.SectionBLL.cache.GetSections();

            foreach (ASECTION section in sections)
            {
                section.VehicleLeave += SectionVehicleLeave;
            }
            List <AADDRESS> addresses = scApp.AddressesBLL.cache.GetAddresses();

            foreach (AADDRESS address in addresses)
            {
                address.VehicleRelease += AddressVehicleRelease;
            }
            var commonInfo = scApp.getEQObjCacheManager().CommonInfo;

            commonInfo.addEventHandler(nameof(LineService), BCFUtility.getPropertyName(() => commonInfo.MPCTipMsgList),
                                       PublishTipMessageInfo);
        }
        private void init()
        {
            //註冊監聽事件
            commonInfo.addEventHandler(HandlerID, BCFUtility.getPropertyName(() => commonInfo.MPCTipMsgList),
                                       (s1, e1) => refreshTable());
            //取得MPC Tip Messages,並載入到Tip Message DGV
            //this.m_TipMsgDGV.DataSource
            dataBS.DataSource = commonInfo.MPCTipMsgList;
            m_TipMsgDGV.AutoGenerateColumns = false;
            m_TipMsgDGV.DataSource          = dataBS;
            dataBS.ResetBindings(false);

            foreach (var msg in commonInfo.MPCTipMsgList)
            {
                msg.IsConfirm = true;
            }
        }
示例#15
0
 private void registerEvent()
 {
     event_id = this.Name + m_iNum;
     eqpt.addEventHandler(event_id
                          , BCFUtility.getPropertyName(() => eqpt.isTcpIpConnect)
                          , (s1, e1) => { changeVehicleStatus(); });
     eqpt.addEventHandler(event_id
                          , BCFUtility.getPropertyName(() => eqpt.VhPositionChangeEvent)
                          , (s1, e1) => { moveVehiclePosition(); });
     //eqpt.addEventHandler(event_id
     //                    , BCFUtility.getPropertyName(() => eqpt.PredictPath)
     //                    , (s1, e1) => { setPredictPath(); });
     eqpt.addEventHandler(event_id
                          , BCFUtility.getPropertyName(() => eqpt.VhStatusChangeEvent)
                          , (s1, e1) => { changeVehicleStatus(); });
     eqpt.addEventHandler(event_id
                          , BCFUtility.getPropertyName(() => eqpt.procProgress_Percen)
                          , (s1, e1) => { updateVhCurrentProcProgress(); });
 }
        public void setMonitorVehicle(object obj, string vh_id)
        {
            try
            {
                lock (predictPathHandler)
                {
                    if (InObservationVh != null)
                    {
                        InObservationVh.removeEventHandler(predictPathHandler);
                    }

                    resetSpecifyRail();
                    resetSpecifyAdr();
                    if (!BCFUtility.isEmpty(vh_id))
                    {
                        InObservationVh = app.ObjCacheManager.GetVEHICLE(vh_id);

                        changePredictPathByInObservation();

                        InObservationVh.addEventHandler(predictPathHandler
                                                        , BCFUtility.getPropertyName(() => InObservationVh.VhExcuteCMDStatusChangeEvent)
                                                        , (s1, e1) => { changePredictPathByInObservation(); });
                        InObservationVh.addEventHandler(predictPathHandler
                                                        , BCFUtility.getPropertyName(() => InObservationVh.VhStatusChangeEvent)
                                                        , (s1, e1) => { changePredictPathByInObservation(); });

                        IndicateVhInfoFromDgv(vh_id);
                    }
                    //else
                    //{
                    //    if (dgv_vehilce_status.SelectedRows.Count > 0)
                    //        dgv_vehilce_status.SelectedRows[0].Selected = false;
                    //}
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Exception");
            }
        }
 /// <summary>
 /// Adds the sheets.
 /// </summary>
 /// <param name="sheets">The sheets.</param>
 public void addSheets(List <ASHEET> sheets)
 {
     sheetList.addSheets(sheets);
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.SheetList));
 }
 /// <summary>
 /// Clears all sheet.
 /// </summary>
 public void clearAllSheet()
 {
     sheetList.clearAllSheet();
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.SheetList));
 }
        private void initialEvent()
        {
            ALINE line = scApp.getEQObjCacheManager().getLine();

            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.ServiceMode)
                                 , (s1, e1) =>
            {
                Adapter.Invoke((obj) =>
                {
                    switch (line.ServiceMode)
                    {
                    case SCAppConstants.AppServiceMode.None:
                        lbl_isMaster.BackColor = Color.Gray;
                        break;

                    case SCAppConstants.AppServiceMode.Active:
                        lbl_isMaster.BackColor = Color.Green;
                        break;

                    case SCAppConstants.AppServiceMode.Standby:
                        lbl_isMaster.BackColor = Color.Yellow;
                        break;
                    }
                }, null);
            });
            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.Secs_Link_Stat)
                                 , (s1, e1) =>
            {
                lbl_hostconnAndMode.BackColor =
                    line.Secs_Link_Stat == SCAppConstants.LinkStatus.LinkOK ? Color.Green : Color.Gray;
            }
                                 );
            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.Host_Control_State)
                                 , (s1, e1) =>
            {
                SetHostControlState(line.Host_Control_State);
            }
                                 );
            //line.addEventHandler(this.Name
            //, BCFUtility.getPropertyName(() => line.TSCStateMachine)
            //     , (s1, e1) =>
            //     {
            //         SetSCState(line.Host_Control_State);
            //     }
            //     );
            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.Redis_Link_Stat)
                                 , (s1, e1) =>
            {
                lbl_RediStat.BackColor =
                    line.Redis_Link_Stat == SCAppConstants.LinkStatus.LinkOK ? Color.Green : Color.Gray;
            }
                                 );
            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.IsEarthquakeHappend)
                                 , (s1, e1) =>
            {
                lbl_earthqualeHappend.BackColor =
                    line.IsEarthquakeHappend ? Color.Red : Color.Gray;
                //if (line.IsEarthquakeHappend)
                //{
                //    aLARMs[0].ALAM_CODE = "AE001";
                //    aLARMs[0].ALAM_DESC = "An earthquake has occurred !!!";
                //    aLARMs[0].ALAM_LVL = "Alarm";
                //    aLARMs[0].EQPT_ID = "MCP";
                //    aLARMs[0].RPT_DATE_TIME = DateTime.Now.ToString(SCAppConstants.DateTimeFormat_19);
                //}
                //else
                //{
                //    aLARMs[0].ALAM_CODE = "";
                //    aLARMs[0].ALAM_DESC = "";
                //    aLARMs[0].ALAM_LVL = "";
                //    aLARMs[0].EQPT_ID = "";
                //    aLARMs[0].RPT_DATE_TIME = "";
                //}
                //Adapter.Invoke((obj) =>
                //{
                //    if (line.IsEarthquakeHappend)
                //        tbcList.SelectedIndex = 4;
                //    dgv_Alarm.Refresh();
                //}, null);
            }
                                 );
            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.DetectionSystemExist)
                                 , (s1, e1) =>
            {
                lbl_detectionSystemExist.BackColor =
                    line.DetectionSystemExist == SCAppConstants.ExistStatus.Exist ? Color.Green : Color.Gray;
            }
                                 );
            scApp.getNatsManager().Subscriber(SCAppConstants.NATS_SUBJECT_CURRENT_ALARM, SetCurrentAlarm);

            sc.App.SystemParameter.AutoOverrideChange += SystemParameter_AutoOverrideChange;
        }
示例#20
0
 public void NotifyVhPositionChange()
 {
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.VhPositionChangeEvent), VEHICLE_ID);
 }
示例#21
0
 public void NotifyVhExcuteCMDStatusChange()
 {
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.VhExcuteCMDStatusChangeEvent), VEHICLE_ID);
 }
示例#22
0
 /// <summary>
 /// Adds the sheets.
 /// </summary>
 /// <param name="sheets">The sheets.</param>
 public virtual void addSheets(List <ASHEET> sheets)
 {
     sheetRecordList.AddRange(sheets);
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.SheetRecordList));
 }
 /// <summary>
 /// Adds the sheet.
 /// </summary>
 /// <param name="sheet">The sheet.</param>
 public void addSheet(ASHEET sheet)
 {
     sheetList.addSheet(sheet);
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.SheetList));
 }
 /// <summary>
 /// Links the lot information.
 /// </summary>
 /// <param name="lot">The lot.</param>
 public void linkLotInfo(ALOT lot)
 {
     BCFUtility.setValueToPropety(ref lot, ref lotItem);
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.LotItem));
 }
示例#25
0
 /// <summary>
 /// Clears all sheet.
 /// </summary>
 public virtual void clearAllSheet()
 {
     sheetRecordList.Clear();
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.SheetRecordList));
 }
 /// <summary>
 /// Loads the cassette.
 /// </summary>
 /// <param name="cassette">The cassette.</param>
 public void loadCassette(ACASSETTE cassette)
 {
     BCFUtility.setValueToPropety(ref cassette, ref cassetteItem);
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.CassetteItem));
 }
示例#27
0
 /// <summary>
 /// Adds the sheet.
 /// </summary>
 /// <param name="sheet">The sheet.</param>
 public virtual void addSheet(ASHEET sheet)
 {
     sheetRecordList.Add(sheet);
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.SheetRecordList));
 }
示例#28
0
 /// <summary>
 /// Adds the lot.
 /// </summary>
 /// <param name="lot">The lot.</param>
 public virtual void addLot(ALOT lot)
 {
     lotList.Add(lot);
     OnPropertyChanged(BCFUtility.getPropertyName(() => this.lotList));
 }
        private void initialEvent()
        {
            ALINE line = scApp.getEQObjCacheManager().getLine();

            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.ServiceMode)
                                 , (s1, e1) =>
            {
                Adapter.Invoke((obj) =>
                {
                    switch (line.ServiceMode)
                    {
                    case SCAppConstants.AppServiceMode.None:
                        lbl_isMaster.BackColor = Color.Gray;
                        break;

                    case SCAppConstants.AppServiceMode.Active:
                        lbl_isMaster.BackColor = Color.Green;
                        break;

                    case SCAppConstants.AppServiceMode.Standby:
                        lbl_isMaster.BackColor = Color.Yellow;
                        break;
                    }
                }, null);
            });
            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.Secs_Link_Stat)
                                 , (s1, e1) =>
            {
                lbl_hostconnAndMode.BackColor =
                    line.Secs_Link_Stat == SCAppConstants.LinkStatus.LinkOK ? Color.Green : Color.Gray;
            }
                                 );
            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.Host_Control_State)
                                 , (s1, e1) =>
            {
                SetHostControlState(line.Host_Control_State);
            }
                                 );
            //line.addEventHandler(this.Name
            //, BCFUtility.getPropertyName(() => line.TSCStateMachine)
            //     , (s1, e1) =>
            //     {
            //         SetSCState(line.Host_Control_State);
            //     }
            //     );
            line.addEventHandler(this.Name
                                 , BCFUtility.getPropertyName(() => line.Redis_Link_Stat)
                                 , (s1, e1) =>
            {
                lbl_RediStat.BackColor =
                    line.Redis_Link_Stat == SCAppConstants.LinkStatus.LinkOK ? Color.Green : Color.Gray;
            }
                                 );
            //line.addEventHandler(this.Name
            //, BCFUtility.getPropertyName(() => line.IsEarthquakeHappend)
            //    , (s1, e1) =>
            //    {
            //        lbl_earthqualeHappend.BackColor =
            //        line.IsEarthquakeHappend ? Color.Red : Color.Gray;
            //    }
            //    );
            //line.addEventHandler(this.Name
            //    , BCFUtility.getPropertyName(() => line.DetectionSystemExist)
            //        , (s1, e1) =>
            //        {
            //            lbl_detectionSystemExist.BackColor =
            //            line.DetectionSystemExist == SCAppConstants.ExistStatus.Exist ? Color.Green : Color.Gray;
            //        }
            //        );
            //scApp.getNatsManager().Subscriber(SCAppConstants.NATS_SUBJECT_CURRENT_ALARM, SetCurrentAlarm);
            line.AlarmListChange += SetCurrentAlarm;

            sc.App.SystemParameter.AutoOverrideChange += SystemParameter_AutoOverrideChange;

            mainform.BCApp.addRefreshUIDisplayFun(this.Name, delegate(object o) { BCUtility.updateUIDisplayByAuthority(mainform.BCApp, this); }); //B0.02
            BCUtility.updateUIDisplayByAuthority(mainform.BCApp, this);                                                                           //B0.02
        }