using DIT.Framework.Module._01_SerialModules; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; namespace DLL_Test_Program { public partial class EnergyMax_PowerMeter_Form : Form { #region Define #endregion #region Field Thread m_DisplayThread; Thread m_DataThread; private EnergyMax_PowerMeter m_powermeter; #endregion #region Property public EnergyMax_PowerMeter PowerMeter { get { return m_powermeter; } set { m_powermeter = value; } } #endregion #region Constructor public EnergyMax_PowerMeter_Form() { InitializeComponent(); this.PowerMeter = new EnergyMax_PowerMeter(); this.cbb_Ports.DataSource = SerialPort.GetPortNames(); this.ThreadInit(); } #endregion #region Thread private void ThreadInit() { m_DisplayThread = new Thread(UpdateDisplay); m_DataThread = new Thread(UpdateData); } private void ThreadStart() { m_DisplayThread.Start(); m_DataThread.Start(); } private void ThreadEnd() { m_DisplayThread.Abort(); m_DataThread.Abort(); } #endregion #region Method private void UpdateDisplay() { while (this.Visible) { lock (this) { Thread.Sleep(100); Application.DoEvents(); if (InvokeRequired) { BeginInvoke(new UpdateUIDelegate(UpdateDisplay)); return; } try { if (this.PowerMeter.SerialPort.IsOpen) { lb_PortState.Text = "Connected"; lb_PortState.BackColor = Color.Lime; btn_PortClose.Enabled = true; btn_PortOpen.Enabled = false; } else { lb_PortState.Text = "Disconnect"; lb_PortState.BackColor = Color.Red; btn_PortClose.Enabled = false; btn_PortOpen.Enabled = true; } } catch (Exception) { } } } } private void UpdateData() { // Check.. } #endregion #region Event private void btn_PortOpen_Click(object sender, EventArgs e) { string port; int timeout; if (this.cbb_Ports.Text == "") return; port = this.cbb_Ports.Text; timeout = 500; if (this.PowerMeter.Connect(port, timeout) == false) { MessageBox.Show("Connect Fail..."); } } private void btn_PortClose_Click(object sender, EventArgs e) { this.PowerMeter.DisConnect(); } private void btn_ReadEnergy_Click(object sender, EventArgs e) { if (this.PowerMeter.SendWaitReceive("READ?") == false) { MessageBox.Show("Send Fail..."); } this.tb_Energy.Text = this.PowerMeter.RecvData; } private void btn_Initial_Click(object sender, EventArgs e) { if (this.PowerMeter.Send("*RST") == false) { MessageBox.Show("Send Fail..."); } } private void EnergyMax_PowerMeter_Form_FormClosing(object sender, FormClosingEventArgs e) { this.ThreadEnd(); } private void EnergyMax_PowerMeter_Form_Load(object sender, EventArgs e) { this.ThreadStart(); } #endregion } }