FormMain.cs 5.3 KB
using Common;
using DeviceLib.BLL;
using Dolen.Forms;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using UControl.UC;
using UIControl.Forms;

namespace AGVDispatch
{
    public partial class FormMain : FrmBase
    {
        public bool IsLoad { get; set; } = false;
        public FormMain(string appName) : base(appName)
        {
            InitializeComponent();
            this.Text = appName;
            Context.Load();
            InitLeftBtn();
            openApi_Click(null, null);
            timer1.Start();
            Context.Start();
            IsLoad = true;
        }
        /// <summary>
        /// 关闭所有资源
        /// </summary>
        protected override void CloseAllThreads()
        {
            try
            {
                OrderManager.ClearAllOrder();
            }
            catch { }
            timer1.Stop();
            Context.Stop();
        }
        #region 左侧按钮功能
        private Button[] leftBtns;
        private Control[] leftControls;
        Color leftBtnColor = Color.FromArgb(0, 192, 0);
        private System.Reflection.Assembly GetAssembly()
        {
            return System.Reflection.Assembly.GetExecutingAssembly();
        }
        FrmRobotUI frmRobotUI;
        private void InitLeftBtn()
        {
            leftBtns = new Button[] {
            btnMain,
            btnRobot,
            btnNode,
            btnOrder,
            btnLog,
            btnSetting,
            btnAbout
            };
            LogControl LogControl = new LogControl();
            LogControl.Init();
            LogControl.Dock = DockStyle.Fill;

            UCAbout UCAbout = new UCAbout();
            UCAbout.Dock = DockStyle.Fill;
            UCAbout.SetCodeNum(FormOperator.GetCodeNum(GetAssembly().GetName().Name));
            UCAbout.SetUpdateTime(FormOperator.GetUpdateTime(GetAssembly()));
            UCAbout.SetVersion(FormOperator.GetVersion(GetAssembly()));

            FrmOrder frmOrder = new FrmOrder();
            frmOrder.Dock = DockStyle.Fill;
            frmOrder.TopLevel = false;
            frmOrder.FormBorderStyle = FormBorderStyle.None;
            frmOrder.Show();
            FrmNode frmNode = new FrmNode();
            frmNode.Dock = DockStyle.Fill;
            frmNode.TopLevel = false;
            frmNode.FormBorderStyle = FormBorderStyle.None;
            frmNode.Show();
            frmRobotUI = new FrmRobotUI();
            frmRobotUI.Dock = DockStyle.Fill;
            frmRobotUI.TopLevel = false;
            frmRobotUI.FormBorderStyle = FormBorderStyle.None;
            frmRobotUI.Show();

            FrmRobot frmRobot = new FrmRobot();
            frmRobot.Dock = DockStyle.Fill;
            frmRobot.TopLevel = false;
            frmRobot.FormBorderStyle = FormBorderStyle.None;
            frmRobot.Show();

            FrmSetting frmSetting = new FrmSetting();
            frmSetting.Dock = DockStyle.Fill;
            frmSetting.TopLevel = false;
            frmSetting.FormBorderStyle = FormBorderStyle.None;
            frmSetting.Show();
            leftControls = new Control[]
             {
             frmRobotUI,
             frmRobot,
             frmNode,
             frmOrder,
             LogControl,
             frmSetting,
             UCAbout
             };
            bodyPanel.Controls.Clear();
            bodyPanel.Controls.Add(frmRobotUI);
        }
        private void LeftBtnClick(Button button)
        {
            foreach (Button b in leftBtns)
            {
                b.BackColor = Color.White;
            }
            leftBtns[button.TabIndex].BackColor = leftBtnColor;
            bodyPanel.Controls.Clear();
            bodyPanel.Controls.Add(leftControls[button.TabIndex]);

        }
        private void leftBtn_Click(object sender, EventArgs e)
        {
            LeftBtnClick((Button)sender);
        }
        #endregion
        void LogMemory()
        {
            FormOperator.LogMemory(Process.GetCurrentProcess(), out double mem, out double cpu);
            lblmemory.Text = $" {mem.ToString("f1")}MB [{cpu.ToString("f1")}%]";
        }
        private void btnExit_Click(object sender, EventArgs e)
        {
            HideForm();
        }
        bool apiOpened = false;
        private void openApi_Click(object sender, EventArgs e)
        {

        }
        object locObj = new object();
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (Monitor.TryEnter(locObj, 500))
            {
                try
                {
                    LogMemory();
                    foreach (var item in frmRobotUI.RobotUIs.Controls)
                    {
                        UCRobotStatus uCRobot = item as UCRobotStatus;
                        if (uCRobot != null && uCRobot.EditMode)
                        {
                            RobotManager.SetRobot(uCRobot.robot);
                            uCRobot.EditMode = false;
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogUtil.Error($"timer1_Tick error", ex);
                }
            }
        }

        private void FormMain_Load(object sender, EventArgs e)
        {

        }

        private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            HideForm();
        }
    }
}