[原创]无线监控系统之二-------C#实现(续)
[原创]无线监控系统之二-------C#实现(续)
接上。。。。 二、我们来看看用户视图层 namespace BUSINESSMANAGE
{ interface DataFormInter { //LOGICDEAL.DEALTHREAD.DealThread dt { set;get;} //Thread thread { set;get;} void init(); void start(); void run(); } } (Ⅱ)接口实现一:显示屏窗口DataDisplyForm using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace BUSINESSMANAGE { public partial class DataDisplyForm : Form,DataFormInter,IDisposable { private bool stop = true; private byte[] tdata=null; private LOGICDEAL.DEALTHREAD.DealThread dt=null ; private Thread thread =null; protected delegate void DisplyTemValue(byte[] dataaa); private DisplyTemValue displytemvalue = null; //委托,数据处理及显示 private DATAACCESS.DbOperation db = null; private int n = 22, m = 9; Label label, label0,label10; TextBox txt1, txt2; char[] ch = new char[] { ’,’}; public DataDisplyForm() { //init(); db = new DATAACCESS.DbOperation(); InitializeComponent(); } private void DataDisplyForm_Load(object sender, EventArgs e) { CreatePanelOnMain(); thread = new Thread(new ThreadStart(run)); thread.Start(); //Control.CheckForIllegalCrossThreadCalls = false; } //public LOGICDEAL.DEALTHREAD.DealThread dt //{ // set // { // dt=new LOGICDEAL.DEALTHREAD.TemVlueThd(); // } // get // { // return dt; // } //} public void init() { } public void run() { DataTable dt1; tdata = new byte[m]; // 最终的9个字节的数据, 顺序:数据,2字节 源地址,2字节 网络地址,2字节 网络号,1字节 通道,1字节 RSSI,1字节 displytemvalue = new DisplyTemValue(showTemDisplyValue); //委托,数据处理及显示 while (stop) { Thread.Sleep(1); if (LOGICDEAL.COMMUNICATE.Cflag.getFtype() == 0) //读取温度数值 { dt = new LOGICDEAL.DEALTHREAD.TemVlueThd(); //新建数据线程类 dt.start(); //开始运行线程 Thread.Sleep(2); //暂停3毫秒,以便dt运行完 if (dt.getData() == null) { continue; } Array.Copy(dt.getData(), tdata, m); //将处理后的最终数据传给用户窗体 this.Invoke(displytemvalue, tdata); //委托,数据处理及显示 dt.stop(); //销毁线程 LOGICDEAL.COMMUNICATE.Cflag.setFtype(-1); } if (LOGICDEAL.COMMUNICATE.Cflag.getFtype() == 1) //更新网络地址 { dt = new LOGICDEAL.DEALTHREAD.TemVlueThd(); //新建数据线程类 dt.start(); //开始运行线程 Thread.Sleep(3); //暂停3毫秒,以便dt运行完 if (dt.getData() == null) { continue; } Array.Copy(dt.getData(), tdata, m); //将处理后的最终数据传给用户窗体 //this.Invoke(displytemvalue, tdata); //委托,数据处理及显示 //dt.stop(); //销毁线程 dt1 = db.getData("select ipaddr from t_node where ipaddr=’" + COMMONDEAL.DataConversion.LenByte(tdata[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(tdata[3].ToString("x").Trim(), 2) + "’"); if (dt1.Rows[0][0].ToString().Equals("")) { } else { db.updateData("update t_node set netaddress=’"+COMMONDEAL.DataConversion.LenByte(tdata[4].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(tdata[5].ToString("x").Trim(), 2) +"’ where ipaddr=’"+dt1.Rows[0][0].ToString()+"’"); } dt.stop(); //销毁线程 LOGICDEAL.COMMUNICATE.Cflag.setFtype(-1); } } } public void showTemDisplyValue(byte[] dataaa) //委托,数据处理及显示 { string v = Convert.ToString(COMMONDEAL.DataConversion.Hex2Ten(COMMONDEAL.DataConversion.LenByte(dataaa[0].ToString(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[1].ToString(), 2))); txttest.Text = v; //测试 string rv = null; try { Label lab = ((Label)(this._Panel1OnM.Controls.Find("lblab" + COMMONDEAL.DataConversion.LenByte(dataaa[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[3].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[7].ToString("x").Trim(), 2), false))[0]); //获取a、b rv = Convert.ToString(Convert.ToDouble(lab.Text.Split(ch)[0].ToString()) * Convert.ToDouble(v) + Convert.ToDouble(lab.Text.Split(ch)[1].ToString())); //计算实际值 ((TextBox)(this._Panel1OnM.Controls.Find("txtdata" + COMMONDEAL.DataConversion.LenByte(dataaa[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[3].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[7].ToString("x").Trim(), 2), false))[0]).Text = rv; //实际数值 if ( float.Parse(rv) >50) //超值报警,暂定50 { errorProvider1.SetIconAlignment(((TextBox)(this._Panel1OnM.Controls.Find("txtrssi" + COMMONDEAL.DataConversion.LenByte(dataaa[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[3].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[7].ToString("x").Trim(), 2), false))[0]), ErrorIconAlignment.MiddleRight); //报警 errorProvider1.SetError(((TextBox)(this._Panel1OnM.Controls.Find("txtrssi" + COMMONDEAL.DataConversion.LenByte(dataaa[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[3].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[7].ToString("x").Trim(), 2), false))[0]), "超值"); } } catch { return; } } public void start() { } private void CreatePanelOnMain() //动态加载窗口控件 { int m=0, n = 0; DataTable dt = db.getData("select ipaddr,channelnum,a,b from t_channal where ipaddr in (select ipaddr from t_node where monitornum=’01’) order by ipaddr desc"); if (dt.Rows.Count <= 0) return; foreach(DataRow dr in dt.Rows) { // 起点坐标(10+m*100,30+n*22) m = 0; label = new Label(); //ipaddr,节点 label.Name = "lbl"+dr[0].ToString() ; label.Text = dr[0].ToString(); label.Location = new Point(10 + m * 100, 30 + n * 22); label.Size = new Size(100,22); this._Panel1OnM.Controls.Add(label); m++; label0 = new Label(); //channelnum,通道标示 label0.Name = "lbl" + dr[1].ToString(); label0.Text = dr[1].ToString(); //通道 label0.Location = new Point(10 + m * 100, 30 + n * 22); label0.Size = new Size(100, 22); this._Panel1OnM.Controls.Add(label0); m++; txt1 = new TextBox(); //数据 txt1.Name = "txtdata" + dr[0].ToString()+dr[1].ToString(); //标示:节点+通道 txt1.Text = "0"; txt1.Location = new Point(10+m*100,30+n*20); txt1.Size = new Size(100,20); txt1.BackColor = Color.White; txt1.Enabled = false; this._Panel1OnM.Controls.Add(txt1); m++; txt2 = new TextBox(); txt2.Name = "txtrssi" + dr[0].ToString() + dr[1].ToString(); //ipaddr+channelnum txt2.Text = "0"; txt2.Location = new Point(10 + m * 100, 30 + n * 20); txt2.Size = new Size(100,20); txt2.BackColor = Color.White; txt2.Enabled = false; this._Panel1OnM.Controls.Add(txt2); m++; label10 = new Label(); //a,b,a、b值 label10.Name = "lblab" + dr[0].ToString()+dr[1].ToString(); label10.Text = dr[2].ToString() +","+dr[3].ToString(); label10.Location = new Point(10 + m * 100, 30 + n * 22); label10.Size = new Size(100, 22); label10.Visible = false; this._Panel1OnM.Controls.Add(label10); n++; } } private void DataDisplyForm_FormClosed(object sender, FormClosedEventArgs e) { thread.Abort(); this.Dispose(true); } private void DataDisplyForm_Load_1(object sender, EventArgs e) { } } } 呵呵~~这就是第二部分了,还有系统的其它一些代码就不帖上了,虽然累但感觉还是蛮高兴的,感谢大家发时间阅读,如你需要打包源代码俺将提供到你的邮箱中。。。,再次感谢大家,感谢大家对易学的支持,希望大家学的愉快~~~~
参考文档:
C#示例-构建基于WebService技术的C/S系统[原创] C#多文档界面(MDI)系统框架 (原创在C/S框架网!) 无线监控系统之一-------UML设计 无线监控系统之二-------C#实现 无线监控系统之三-------测试与扩展 无线监控系统之四-------结言 [原创]C#植入友商网在线服务并实现同步用户注册接口(一) [原创]C#植入友商网在线服务并实现同步用户注册接口(三) [原创]C#一键隐藏QQ/MSN,显示/隐藏系统托盘图标,获取托盘图标 C#.NET 监视操作系统打开程序(使用Window消息实现全局系统勾子) C# 判断操作系统是专业版、家庭版、企业版、教育版(原创) 原创ERP系统开发平台|基于C#.NET打造的C/S系统快速开发框架 【原创】C# Winform进销存系统快速开发框架 【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆 C#源码-[整站程序]英语沙龙全站系统 net 2.0_esalon-源码下载
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |