物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項(xiàng)目五 智能大棚控制系統(tǒng)_第1頁
物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項(xiàng)目五 智能大棚控制系統(tǒng)_第2頁
物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項(xiàng)目五 智能大棚控制系統(tǒng)_第3頁
物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項(xiàng)目五 智能大棚控制系統(tǒng)_第4頁
物聯(lián)網(wǎng).NET開發(fā)(第二版) 課件 項(xiàng)目五 智能大棚控制系統(tǒng)_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

智能大棚控制系統(tǒng)任務(wù)1:線程實(shí)現(xiàn)頁面刷新任務(wù)2:委托實(shí)現(xiàn)頁面刷新任務(wù)3:事件引發(fā)頁面刷新項(xiàng)目五智能大棚控制系統(tǒng)實(shí)現(xiàn)了智能大棚的溫度、光敏數(shù)值監(jiān)控及控制功能,本項(xiàng)目模擬實(shí)現(xiàn)了大棚環(huán)境溫度及光敏的監(jiān)測、通過數(shù)據(jù)分析控制風(fēng)扇和燈光的打開和關(guān)閉控制,為智能農(nóng)業(yè)提供解決方案。Windows為多任務(wù)操作系統(tǒng),操作系統(tǒng)在處理任務(wù)時(shí)采用多線程技術(shù),C#引入了多線程技術(shù),通過多線程技術(shù)能夠提高程序的執(zhí)行效率,減少系統(tǒng)資源的浪費(fèi)。面向?qū)ο蟮某绦蛟O(shè)計(jì)在圖形用戶界面開發(fā)中采用了事件處理機(jī)制,通過事件處理實(shí)現(xiàn)程序的交互,.NETFramework在處理事件中引入了委托的概念,委托在C#中是一個(gè)特殊的對象類型,委托的使用是安全的、面向?qū)ο蟮模ㄟ^委托實(shí)現(xiàn)方法的調(diào)用。項(xiàng)目引入掌握線程的定義及使用掌握委托的定義及使用掌握事件的定義及使用學(xué)習(xí)目標(biāo)項(xiàng)目運(yùn)行后,自動監(jiān)測大棚內(nèi)環(huán)境溫度及光敏數(shù)據(jù),數(shù)據(jù)每隔5秒自動進(jìn)行刷新,風(fēng)扇狀態(tài)和RGB狀態(tài)初始處于“關(guān)閉”狀態(tài),程序啟動運(yùn)行效果如圖5-1所示:項(xiàng)目描述如果監(jiān)測到溫度超過30度,則自動打開風(fēng)扇,風(fēng)扇變?yōu)椤按蜷_”狀態(tài),如果監(jiān)測到光敏數(shù)據(jù)超過120,則自動打開RGB燈,RGB燈變?yōu)椤按蜷_”狀態(tài),如圖5-2所示:如果監(jiān)測到溫度低于30度,則自動關(guān)閉風(fēng)扇,風(fēng)扇變?yōu)椤瓣P(guān)閉”狀態(tài),如果監(jiān)測到光敏數(shù)據(jù)低于120,則自動關(guān)閉RGB燈,RGB燈變?yōu)椤瓣P(guān)閉”狀態(tài),,如圖5-3所示:項(xiàng)目描述任務(wù)1:線程實(shí)現(xiàn)頁面刷新任務(wù)2:委托實(shí)現(xiàn)頁面刷新任務(wù)3:事件引發(fā)頁面刷新工作任務(wù)任務(wù)描述

項(xiàng)目運(yùn)行通過隨機(jī)函數(shù)模擬生成溫度及光敏隨機(jī)數(shù)據(jù),通過后臺線程獲取隨機(jī)數(shù)據(jù)并顯示,數(shù)據(jù)每隔5秒自動刷新,項(xiàng)目運(yùn)行過程中對數(shù)據(jù)進(jìn)行分析,如果溫度超過30度,則打開風(fēng)扇,否則關(guān)閉風(fēng)扇,如果如果光敏大于100,則打開RGB燈,否則關(guān)閉RGB燈。任務(wù)1線程實(shí)現(xiàn)頁面刷新1.線程

線程(英語:thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù),多個(gè)線程并發(fā)執(zhí)行能提高程序執(zhí)行效率,C#支持多線程并發(fā),C#能過命名空間System.Threading支持線程對象,Thread類用來創(chuàng)建線程對象,如:Threadt1=newThread(show);Show為要執(zhí)行的方法,Thread類的常用屬性如表所示:知識引入任務(wù)1線程實(shí)現(xiàn)頁面刷新屬性說明CurrentContext獲取線程正在其中執(zhí)行的當(dāng)前上下文CurrentThread獲取當(dāng)前正在運(yùn)行的線程IsAlive判斷當(dāng)前線程是否處于活動狀態(tài)IsBackground獲取或設(shè)置取或設(shè)置線程是否為后臺線程。Name獲取或設(shè)置線程的名稱ThreadState當(dāng)前線程的狀態(tài)1.線程

Thread類的常用方法如表5-2所示:知識引入任務(wù)1線程實(shí)現(xiàn)頁面刷新方法說明publicvoidAbort()終止此線程的過程,調(diào)用此方法通常會終止此線程publicvoidInterrupt()中斷處于WaitSleepJoin線程狀態(tài)的線程publicvoidJoin()阻塞調(diào)用線程publicstaticvoidResetAbort()取消為當(dāng)前線程請求的AbortpublicvoidStart()線程啟動運(yùn)行publicstaticvoidSleep()讓線程暫停一段時(shí)間1.線程知識引入任務(wù)1線程實(shí)現(xiàn)頁面刷新【例5-1】線程的定義

staticvoidMain(string[]args){Thread

t=newThread(show);t.Start();for(inti=0;i<50;i++){Console.WriteLine("ok");}}staticvoidshow(){for(inti=0;i<50;i++){Console.WriteLine("hello");}}1.線程知識引入任務(wù)1線程實(shí)現(xiàn)頁面刷新【例5-2】線程的方法調(diào)用

staticvoidMain(string[]args){Threadt=newThread(print);t.Start();}publicstaticvoidprint(){for(inti=5;i>0;i--){Console.WriteLine(i);Thread.Sleep(i*1000);}

}2.Random類知識引入任務(wù)1線程實(shí)現(xiàn)頁面刷新Random類表示隨機(jī)數(shù)生成器,通過Random類可以產(chǎn)生滿足條件的隨機(jī)數(shù),Random類有兩種構(gòu)造方法,分別為:Random():表示根據(jù)當(dāng)前系統(tǒng)時(shí)間為種子,產(chǎn)生隨機(jī)數(shù)Random(Int32):表示根據(jù)設(shè)定的種子產(chǎn)生隨機(jī)數(shù)方法

說明Next()返回一個(gè)非負(fù)隨機(jī)整數(shù)Next(Int32)返回一個(gè)小于所指定最大值的非負(fù)隨機(jī)整數(shù)Next(Int32,Int32)返回在指定范圍內(nèi)的任意整數(shù)NextDouble()返回一個(gè)大于或等于0.0且小于1.0的隨機(jī)浮點(diǎn)數(shù)Sample()返回一個(gè)大于或等于0.0且小于1.0的隨機(jī)浮點(diǎn)數(shù),該方法為protected,訪問級別不同,其它方法為public。2.Random類知識引入任務(wù)1線程實(shí)現(xiàn)頁面刷新【例5-3】Random類生成隨機(jī)數(shù)

staticvoidMain(string[]args){Randomrand=newRandom();Console.WriteLine(rand.Next());Console.WriteLine(rand.Next(5));Console.WriteLine(rand.Next(5,10));Console.WriteLine(rand.NextDouble());

}3.跨線程更新UI知識引入任務(wù)1線程實(shí)現(xiàn)頁面刷新在多線程操作中,如果子線程需要訪問主線程創(chuàng)建的控件,特別是子線程希望隨時(shí)更新主線程創(chuàng)建控件的外觀,在.NET2.0后系統(tǒng)可能會拋出異常,導(dǎo)致程序不能運(yùn)行。這主要是出于安全考慮,CheckForIllegalCrossThreadCalls的值在.NET2.0后默認(rèn)為true,表示在訪問非創(chuàng)建線程控件時(shí)會進(jìn)行安全考慮,系統(tǒng)將拋出異常。3.跨線程更新UI知識引入任務(wù)1線程實(shí)現(xiàn)頁面刷新【例5-4】實(shí)現(xiàn)當(dāng)點(diǎn)擊按鈕“button1”后,上面的標(biāo)簽在“紅色”變?yōu)椤八{(lán)色”,并且每隔2秒在兩種顏色之間進(jìn)行切換。3.跨線程更新UI知識引入任務(wù)1線程實(shí)現(xiàn)頁面刷新【例5-4】privatevoidbutton1_Click(objectsender,EventArgse){Threadt=newThread(setText);t.IsBackground=true;t.Start();}privatevoidsetText(){while(true){if(label1.Text.Equals("紅色")){label1.Text="藍(lán)色";}else{label1.Text="紅色";}Thread.Sleep(2000); }

}任務(wù)1

線程實(shí)現(xiàn)頁面刷新任務(wù)實(shí)現(xiàn)1.新建Windows窗體應(yīng)用程序項(xiàng)目,添加控件及屬性設(shè)置如表所示:控件屬性值Form1Text智能大棚控制系統(tǒng)Form1Size480,360Label1Text智能大棚控制系統(tǒng)Label2Text當(dāng)前溫度Label3TextnullLabel3NamelblTempLabel4Text當(dāng)前光敏Label4NamelblPhotoLabel5Text風(fēng)扇狀態(tài)Label6Text關(guān)閉Label6NamelblFsLabel7TextRGB燈狀態(tài)Label8Text關(guān)閉Label8NamelblRgb任務(wù)1

線程實(shí)現(xiàn)頁面刷新任務(wù)實(shí)現(xiàn)2.添加頁面事件代碼如下:publicForm1(){InitializeComponent();Control.CheckForIllegalCrossThreadCalls=false;}privatevoidForm1_Load(objectsender,EventArgse){Threadt=newThread(setVal);t.IsBackground=true;t.Start();}//隨機(jī)生成溫度privateintgetWd(){intresult=-1;Randomrand=newRandom();result=rand.Next(20,35);returnresult;}任務(wù)1

線程實(shí)現(xiàn)頁面刷新任務(wù)實(shí)現(xiàn)2.添加頁面事件代碼如下://隨機(jī)生成光敏privateintgetPhoto(){intresult=-1;Randomrand=newRandom();result=rand.Next(50,150);returnresult;}

//讀取值privatevoidsetVal(){while(true){intwdNum=getWd();lblTemp.Text=wdNum.ToString();if(wdNum>=28){lblFs.Text="打開";}else{lblFs.Text="關(guān)閉";}intphotoNum=getPhoto();lblPhoto.Text=photoNum.ToString();if(photoNum>=100){lblRgb.Text="打開";}else{lblRgb.Text="關(guān)閉";}Thread.Sleep(5000);}}線程是操作系統(tǒng)運(yùn)算調(diào)度的最小單位,多線程協(xié)作能提高程序執(zhí)行效率。線程有多種狀態(tài),線程通過start()啟動執(zhí)行,通過sleep()進(jìn)入睡眠狀態(tài)。子線程訪問主線程控件狀態(tài)可能拋出異常信息。任務(wù)1

線程實(shí)現(xiàn)頁面刷新任務(wù)小結(jié)任務(wù)描述在任務(wù)1中通過設(shè)置Control.CheckForIllegalCrossThreadCalls=false;避免了系統(tǒng)對子線程訪問主線程更新UI控件的安全檢查,這樣可以避免程序因?yàn)樗⑿陆缑娉霈F(xiàn)的“假死”現(xiàn)象,但在實(shí)際應(yīng)用中,因?yàn)槎嗑€程可能同時(shí)訪問主線程同一控件,在線程數(shù)不多的情況下可能看不出問題,但在線程數(shù)量增多及訪問UI控件頻率增大的情況下可能導(dǎo)致數(shù)據(jù)錯(cuò)誤,因此當(dāng)子線程訪問主線程申請控制UI控件后,最好有一個(gè)應(yīng)答的過程,在訪問前申請,在訪問后告之,任務(wù)2通過委托及control.Invoke和Control.BeginInvoke實(shí)現(xiàn)UI控件的刷新實(shí)現(xiàn)項(xiàng)目功能。任務(wù)2

委托實(shí)現(xiàn)頁面刷新1.委托任務(wù)2委托實(shí)現(xiàn)頁面刷新知識引入委托是.NETFramework引入的概念,它是面向?qū)ο蟮?,類似于C語言中的函數(shù)指針,通過委托可以調(diào)用C#中的方法,委托是一種特殊的對象類型,定義一個(gè)委托可以同時(shí)引用多個(gè)方法,委托只是定義了這一類方法的參數(shù)類型和參數(shù)個(gè)數(shù),不指定具體的方式功能,在實(shí)例化委托時(shí)通過方法參數(shù)具體到特定的方法,通過調(diào)用委托實(shí)現(xiàn)方法的調(diào)用執(zhí)行。使用委托方法如下:

定義委托

實(shí)例化委托

調(diào)用委托在C#中使得delegate關(guān)鍵字定義委托,語法為:[訪問修飾符]deletate返回值類型

委托名([參數(shù)列表]);如publicdeletateintGetData(inta,intb);1.委托任務(wù)2委托實(shí)現(xiàn)頁面刷新知識引入【例5-5】委托的定義

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceDemo5_4{classProgram{//定義委托publicdelegateintGetData(intn);publicstaticintGetSum(intn){intsum=0;for(inti=1;i<=n;i++){sum+=i;}returnsum;

}publicstaticintGetFac(intn){intfac=1;for(inti=1;i<=n;i++){fac*=i;}returnfac;}staticvoidMain(string[]args){GetDatagetsum=newGetData(GetSum);GetDatagetfac=newGetData(GetFac);Console.WriteLine(getsum(5));Console.WriteLine(getfac(5));}}}1.委托任務(wù)2委托實(shí)現(xiàn)頁面刷新知識引入【例5-6】指向?qū)嵗椒ǖ奈惺褂?/p>

publicdelegatevoidshow();classDemo5{publicvoidmsgShow(){Console.WriteLine("考試時(shí)間到");}}classProgram{staticvoidMain(string[]args){showmsgshow=newshow(newDemo5().msgShow);msgshow();}}1.委托任務(wù)2委托實(shí)現(xiàn)頁面刷新知識引入【例5-7】匿名委托的使用

publicdelegatevoidshow();classProgram{staticvoidMain(string[]args){showmsgshow=delegate(){Console.WriteLine("下課了");};msgshow();}

}2.Invoke()和BeginInvoke()任務(wù)2委托實(shí)現(xiàn)頁面刷新知識引入Control.Invoke(Delegate):在擁有此控件的基礎(chǔ)窗口句柄的線程上執(zhí)行指定的委托。Control.BeginInvoke(Delegate):在創(chuàng)建控件的基礎(chǔ)句柄所在線程上異步執(zhí)行指定委托。的windows窗體應(yīng)用程序中,子線程更新主線程創(chuàng)建UI控件,經(jīng)常通過后臺線程實(shí)現(xiàn)調(diào)用Invoke()和Begininvoke()方法與主線程發(fā)送消息。2.Invoke()和BeginInvoke()任務(wù)2委托實(shí)現(xiàn)頁面刷新知識引入【例5-8】下面使用委托及Invoke()方法實(shí)現(xiàn)主線程UI控件刷新,程序運(yùn)行如圖所示:點(diǎn)擊按鈕“button1”后,上面的標(biāo)簽在“紅色”變?yōu)椤八{(lán)色”,并且每隔2秒在兩種顏色之間進(jìn)行切換。2.Invoke()和BeginInvoke()任務(wù)2委托實(shí)現(xiàn)頁面刷新知識引入【例5-8】publicdelegatevoidUpdateUI();publicForm2(){InitializeComponent();}privatevoidsetText(){while(true){if(InvokeRequired){if(label1.Text.Equals("紅色")){this.Invoke(newUpdateUI(delegate(){label1.Text="藍(lán)色";}));}

else{this.Invoke(newUpdateUI(delegate(){label1.Text="紅色";}));}Thread.Sleep(2000);}}}privatevoidbutton1_Click(objectsender,EventArgse){UpdateUIupdateUi=newUpdateUI(setText);Threadt=newThread(newThreadStart(updateUi));t.IsBackground=true;t.Start();}publicpartialclassForm1:Form{publicdelegatevoidUpdateUI();publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){Threadt=newThread(newThreadStart(setVal));t.IsBackground=true;t.Start();}任務(wù)2委托實(shí)現(xiàn)頁面刷新任務(wù)實(shí)現(xiàn)//隨機(jī)生成溫度privateintgetWd(){intresult=-1;Randomrand=newRandom();result=rand.Next(20,35);returnresult;}//隨機(jī)生成光敏privateintgetPhoto(){intresult=-1;Randomrand=newRandom();result=rand.Next(50,150);returnresult;}//讀取值privatevoidsetVal(){while(true){if(InvokeRequired){intwdNum=getWd();intphotoNum=getPhoto();this.Invoke(newUpdateUI(delegate(){lblTemp.Text=wdNum.ToString();任務(wù)2委托實(shí)現(xiàn)頁面刷新任務(wù)實(shí)現(xiàn)if(wdNum>=28){lblFs.Text="打開";}else{lblFs.Text="關(guān)閉";}lblPhoto.Text=photoNum.ToString();if(photoNum>=100){lblRgb.Text="打開";}else{lblRgb.Text="關(guān)閉";}}));Thread.Sleep(3000);}}}}委托使關(guān)鍵字delegate進(jìn)行定義。委托類似于C語言的函數(shù)指針,委托在實(shí)例化時(shí)的參數(shù)為方法名。子線程通過Invoke()和Begininvoke()方法與主線程發(fā)送消息。任務(wù)小結(jié)任務(wù)2委托實(shí)現(xiàn)頁面刷新C#作為面向?qū)ο蟮某绦蛟O(shè)計(jì),任何事物都是對象,UI界面中的控件都作為一個(gè)單獨(dú)的對象存在,對象與對象之間通過發(fā)送消息進(jìn)行通信,接受消息的對象可以根據(jù)信息引發(fā)不同的動作,在C#中通過事件機(jī)制發(fā)送消息,通過事件機(jī)制可以保證UI控件的更新必須在滿足一條件下執(zhí)行,只有訂閱了特定事件的控件在該事件發(fā)生后才引發(fā)事件代碼的執(zhí)行,如果事件沒有發(fā)生或控件沒有訂閱事件,則不執(zhí)行刷新代碼,這樣極大地提高了程序的執(zhí)行效率。比如任務(wù)中的溫度監(jiān)測控制只有在溫度傳感器在線時(shí)再執(zhí)行頁面刷新動作,光照監(jiān)測控制只有在光照傳感器工作時(shí)再執(zhí)行頁面刷新動作,避免了資源浪費(fèi)。任務(wù)描述任務(wù)3事件引發(fā)頁面刷新C#中的事件通過委托來實(shí)現(xiàn),事件允許一個(gè)對象向另一個(gè)對象通知消息,發(fā)送消息的對象稱為事件源,被通知的對象要求事先訂閱事件,只有訂閱了事件的對象才能收到消息,C#中的事件處理步驟如下:定義事件訂閱事件事件發(fā)生時(shí)通知訂閱者事件的定義:[訪問修飾符]event委托名

事件名;因此,事件在定義前首先要定義委托,然后再根據(jù)委托定義事件,例:publicdelegatevoidsetUiHandler();publiceventsetUiHandlereventsetUiHandler;知識引入任務(wù)3事件引發(fā)頁面刷新1.事件1.事件知識引入任務(wù)3事件引發(fā)頁面刷新訂閱事件:訂閱事件使用運(yùn)算符“+=”,一個(gè)事件可以被多個(gè)對象訂閱,訂閱者可能通過“-=”取消已訂閱的事件,例:eventsetUiHandler+=newsetUiHandler(toolWd.getWd);eventsetUiHandler+=newsetUiHandler(toolPhoto.getPhoto);引發(fā)事件:if(eventsetUiHandler!=null){eventsetUiHandler();}當(dāng)沒有對象訂閱eventsetUiHandler時(shí),則eventsetUiHandler的值為null,否則訂閱者將激發(fā)事件并執(zhí)行事件代碼。1.事件知識引入任務(wù)3事件引發(fā)頁面刷新【例5-9】事件的定義

publicdelegatevoidLaunchHandler();//定義委托publicclassLaunch{publiceventLaunchHandlerEventLaunchHandler;//定義事件publicvoidBeginLanuch(){Console.WriteLine("衛(wèi)星發(fā)射倒計(jì)時(shí)30分鐘,各組進(jìn)入準(zhǔn)備");if(EventLaunchHandler!=null){EventLaunchHandler();}}

}1.事件知識引入任務(wù)3事件引發(fā)頁面刷新【例5-9】事件的定義

publicclassPrepareCommand{stringpid;publicPrepareCommand(){}publicPrepareCommand(stringpid){this.pid=pid;}publicvoidcommand(){Console.WriteLine("指揮組"+pid+"進(jìn)入30分鐘準(zhǔn)備狀態(tài),正常");}}publicclassPrepareControl{stringpid;publicPrepareControl(){}publicPrepareControl(stringpid){this.pid=pid;}publicvoidcontrol(){Console.WriteLine("控制組"+pid+"進(jìn)入30分鐘準(zhǔn)備狀態(tài),正常");}}1.事件知識引入任務(wù)3事件引發(fā)頁面刷新【例5-9】事件的定義

publicclassPrepareRta{stringpid;publicPrepareRta(){}publicPrepareRta(stringpid){this.pid=pid;}publicvoidrta(){Console.WriteLine("監(jiān)控組"+pid+"進(jìn)入30分鐘準(zhǔn)備狀態(tài),正常");}}classProgram{staticvoidMain(string[]args){Launchlaunch=newLaunch();PrepareCommandp1=newPrepareCommand("A001");PrepareControlp2=newPrepareControl("B001");PrepareRtap3=newPrepareRta("C001");//訂閱事件launch.EventLaunchHandler+=newLaunchHandler(mand);launch.EventLaunchHandler+=newLaunchHandler(p2.control);launch.EventLaunchHandler+=newLaunchHandler(p3.rta);launch.BeginLanuch();

}}2.參數(shù)事件知識引入任務(wù)3事件引發(fā)頁面刷新EventArgs類用作表示事件數(shù)據(jù)的所有類的基類。例如,System.AssemblyLoadEventArgs類派生自EventArgs和用來保存程序集加載事件的數(shù)據(jù)。若要?jiǎng)?chuàng)建一個(gè)自定義事件數(shù)據(jù)類,可創(chuàng)建EventArgs子類,并提供用于存儲所需的數(shù)據(jù)的屬性。通常自定義事件數(shù)據(jù)類的名稱應(yīng)以EventArgs結(jié)尾2.參數(shù)事件知識引入任務(wù)3事件引發(fā)頁面刷新【例5-10】參數(shù)事件的使用

publicdelegatevoidEventMenuHandler(objectsource,TestEventArgse);publicclassTestEventArgs:EventArgs{publicintmenu{get;set;}publicTestEventArgs(intmenu){this.menu=menu;}

}classMenu{publiceventEventMenuHandlerEventMenu;privateintmenu;publicintMenuSelect{get{returnmenu;}set{if(EventMenu!=null){TestEventArgsargs=newTestEventArgs(value);EventMenu(this,args);this.menu=args.menu;}}}}2.參數(shù)事件知識引入任務(wù)3事件引發(fā)頁面刷新【例5-10】參數(shù)事件的使用

classProgram{staticvoidMain(string[]args){Menumenu1=newMenu();menu1.EventMenu+=newEventMenuHandler(menuTest);menu1.MenuSelect=1;menu1.MenuSelect=4;}publicstaticvoidmenuTest(objectsource,TestEventArgse){if(e.menu==4){Console.WriteLine("系統(tǒng)退出:---"+DateTime.Now);Environment.Exit(0);}else{Console.WriteLine("歡迎進(jìn)入系統(tǒng),您選擇的菜單為:"+e.menu);}}}publicpartialclassForm1:Form{publicdelegatevoidUpdateUI();publiceventUpdateUIEventUpdate;publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){EventUpdate+=newUpdateUI(setVal);if(EventUpdate!=null){Threadt=newThread(newThreadStart(EventUpdate));t.IsBackground=true;t.Start();}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論