物联网.NET开发(第二版) 课件 张勇 项目5--9 智能大棚控制系统 --- 智能家居系统 .pptx

物联网.NET开发(第二版) 课件 张勇 项目5--9 智能大棚控制系统 --- 智能家居系统 .pptx

  1. 1、本文档共198页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

智能大棚控制系统;智能大棚控制系统实现了智能大棚的温度、光敏数值监控及控制功能,本项目模拟实现了大棚环境温度及光敏的监测、通过数据分析控制风扇和灯光的打开和关闭控制,为智能农业提供解决方案。

Windows为多任务操作系统,操作系统在处理任务时采用多线程技术,C#引入了多线程技术,通过多线程技术能够提高程序的执行效率,减少系统资源的浪费。面向对象的程序设计在图形用户界面开发中采用了事件处理机制,通过事件处理实现程序的交互,.NETFramework在处理事件中引入了委托的概念,委托在C#中是一个特殊的对象类型,委托的使用是安全的、面向对象的,通过委托实现方法的调用。;掌握线程的定义及使用

掌握委托的定义及使用

掌握事件的定义及使用;项目运行后,自动监测大棚内环境温度及光敏数据,数据每隔5秒自动进行刷新,风扇状态和RGB状态初始处于“关闭”状态,程序启动运行效果如图5-1所示:;如果监测到温度低于30度,则自动关闭风扇,风扇变为“关闭”状态,如果监测到光敏数据低于120,则自动关闭RGB灯,RGB灯变为“关闭”状态,,如图5-3所示:;任务1:线程实现页面刷新

任务2:委托实现页面刷新

任务3:事件引发页面刷新;任务描述

项目运行通过随机函数模拟生成温度及光敏随机数据,通过后台线程获取随机数据并显示,数据每隔5秒自动刷新,项目运行过程中对数据进行分析,如果温度超过30度,则打开风扇,否则关闭风扇,如果如果光敏大于100,则打开RGB灯,否则关闭RGB灯。;1.线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务,多个线程并发执行能提高程序执行效率,C#支持多线程并发,C#能过命名空间System.Threading支持线程对象,Thread类用来创建线程对象,如:

Threadt1=newThread(show);

Show为要执行的方法,Thread类的常用属性如表所示:;1.线程

Thread类的常用方法如表5-2所示:;1.线程;1.线程;2.Random类;2.Random类;3.跨线程更新UI;3.跨线程更新UI;3.跨线程更新UI;任务1线程实现页面刷新;任务1线程实现页面刷新;任务1线程实现页???刷新;线程是操作系统运算调度的最小单位,多线程协作能提高程序执行效率。

线程有多种状态,线程通过start()启动执行,通过sleep()进入睡眠状态。

子线程访问主线程控件状态可能抛出异常信息。;任务描述

在任务1中通过设置Control.CheckForIllegalCrossThreadCalls=false;避免了系统对子线程访问主线程更新UI控件的安全检查,这样可以避免程序因为刷新界面出现的“假死”现象,但在实际应用中,因为多线程可能同时访问主线程同一控件,在线程数不多的情况下可能看不出问题,但在线程数量增多及访问UI控件频率增大的情况下可能导致数据错误,因此当子线程访问主线程申请控制UI控件后,最好有一个应答的过程,在访问前申请,在访问后告之,任务2通过委托及control.Invoke和Control.BeginInvoke实现UI控件的刷新实现项目功能。;1.委托;1.委托;1.委托;1.委托;2.Invoke()和BeginInvoke();2.Invoke()和BeginInvoke();2.Invoke()和BeginInvoke();publicpartialclassForm1:Form

{

publicdelegatevoidUpdateUI();

publicForm1()

{

InitializeComponent();

}

privatevoidForm1_Load(objectsender,EventArgse)

{

Threadt=newThread(newThreadStart(setVal));

t.IsBackground=true;

t.Start();

};//读取值

privatevoidsetVal()

{

while(true)

{

if(InvokeRequired)

{

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档