[原创]无线监控系统之二-------C#实现(续)
接上。。。。
二、我们来看看用户视图层
(Ⅰ) 用户窗体公共接口DataFormInter
namespace BUSINESSMANAGE
{
interface DataFormInter
{
//LOGICDEAL.DEALTHREAD.DealThread dt { set;get;}
//Thread thread { set;get;}
void init();
void start();
void run();
}
}
{
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)
{
}
}
}
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# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆
WebApi接口使用HttpGet方式实现接受实体类参数(原创)
[原创]C#植入友商网在线服务并实现同步用户注册接口(三)
[原创]C#植入友商网在线服务并实现同步用户注册接口(一)
原创C/S架构开源软件 - C#.NET+Winform+Dev+SQL快速开发框架
原创:C/S架构快速开发框架通用可配置的数据修改日志解决方案
【原创】WebApi开发框架:Token生成、Token缓存原理、Token验证、令牌机制与原理
【原创】C# Winform Dev自动下拉弹框筛选数据PopupContainerEdit组件
【原创】C# Dev用户自定义组件,自动下拉弹框表格过滤数据组件ucMyLookUpEdit
【原创】简单快速软件开发平台,C/S架构二次开发平台
C# 格式化CodeHighlighter生成的SQL脚本高亮着色源码(CSFramework.com原创)
原创文章:WebApi接口开发实例,搭建和部署WebApi接口
NET开发框架,基于ADO.NET数据持久化快速开发框架平台-C/S框架网原创产品
C#框架推荐-C/S框架网原创快速开发平台系列产品
原创文档-Winform开发框架提供通用导入Excel功能界面|C/S框架网
原创MES系统框架及MES开源框架 | C/S框架网
【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆
WebApi接口使用HttpGet方式实现接受实体类参数(原创)
[原创]C#植入友商网在线服务并实现同步用户注册接口(三)
[原创]C#植入友商网在线服务并实现同步用户注册接口(一)
原创C/S架构开源软件 - C#.NET+Winform+Dev+SQL快速开发框架
原创:C/S架构快速开发框架通用可配置的数据修改日志解决方案
【原创】WebApi开发框架:Token生成、Token缓存原理、Token验证、令牌机制与原理
【原创】C# Winform Dev自动下拉弹框筛选数据PopupContainerEdit组件
【原创】C# Dev用户自定义组件,自动下拉弹框表格过滤数据组件ucMyLookUpEdit
【原创】简单快速软件开发平台,C/S架构二次开发平台
C# 格式化CodeHighlighter生成的SQL脚本高亮着色源码(CSFramework.com原创)
原创文章:WebApi接口开发实例,搭建和部署WebApi接口
NET开发框架,基于ADO.NET数据持久化快速开发框架平台-C/S框架网原创产品
C#框架推荐-C/S框架网原创快速开发平台系列产品
原创文档-Winform开发框架提供通用导入Excel功能界面|C/S框架网
原创MES系统框架及MES开源框架 | C/S框架网
其它资料:
什么是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内容管理系统 |
什么是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内容管理系统 |
在线客服
