C# 視窗程式:視窗程式的事件驅動邏輯_筆記_傳統思維時常會犯的錯誤_timer物件使用

我們建議一個空的視窗範例來做一個簡單說明!!




拉好一個button  及  一個  Label 之後


我們首先練習做一個簡單的加總計數功能(算總和)

用傳統思維

就是對  button  快點兩下  做按鈕事件的撰寫








假設我今天是要做一個   「計數器」 

而且是  一個   往下數的   計數 功能

那就是  從 10  數到 0 呀

就反過來    一般我們會這麼去做設計




結果   他又是立即顯示的

一次數到1   沒法看到從10、 9、8、7....4、3..

x  照理講會從10數到1阿    label  我也有給它顯示了阿!!


原因是因為  現在的電腦   4G 以上 左右 處理速度   相當於10億(10的9次方)

處理太快  它直接算完了  你是看不到的!!


大一計算機概論小回顧 : 常常會聽到這個電腦是幾"妹嘎"(英文字是mega)幾G
在電腦裡面,可以記憶一個字母的單位叫做位元組(byte,唸成拜特),由於電腦都是以01010101的二進制型式記錄資料,因此,在單位的換算上也是以二的幾次方(二連乘幾次)來表示。就好像公克(g)換算成公斤(kg)加上一個k(代表1,000)一樣。
210次方)個byte -> 2^10 B                                                        
換算成1KB,約相當於一千個位元組(正確的數字是1,024 bytes),簡寫成1K1KB=10^3 (thousand)
K的下一個單位是M,也就是前面的"妹嘎"
210次方*210次方)個byte -> 2^20 B
換算成1MB,相當於1,024K(正確的數字是1,048,576 bytes),也就是大約一百萬個位元組,簡寫成1MB=10^6 (million)
另一個比MB還大的單位是G
210次方*210次方*210次方)個byte -> 2^30 B
換算成1GB,相當於1,024M(正確的數字是 1,073,741,824 bytes),也就是大約十億個位元組。簡稱成1GB=10^9 (billion)
最後一個比G大的單位是T
210次方*210次方*210次方*210次方)個byte -> 2^40 B
換算成1TB,相當於1024G(正確數字是1,099,511,627,776 bytes ),也就是大約兆個位元組。簡稱成 1TB=10^12 (trillion)   接下去還有呢??? 參考即可
PB 250次方: 1125899906842624 BYTE,1024 TB. 
EB 
260次方: 1152921504606846976 BYTE,1024 PB. 
ZB 
270次方: 1024 EB. 
YB 
280次方: 1024 ZB.

節自 : 大一計算機概論筆記




視窗的程式設計邏輯  和一般傳統程式設計邏輯是不一樣的

視窗的設計邏輯  是    寫程式的開發者 要去配合該視窗系統

主控權在 視窗系統  而不是在你身上



視窗系統在適當的時候會透過某個函數把控制權交給你

但是你在得到那個控制權之後

你做完通常是一段非常短的程式之後

又會馬上把控制權交還給視窗系統

視窗系統又繼續做他的事情

函數執行完就是控制權交回去了







我們要設計一個時鐘或者  倒數計數器

不應該把所有要做的事直接通通用傳統程式邏輯思維寫在

button 的 block




由於我希望按下去的時候   會每秒數一次~

這裡需要用到  Timer 的物件


每隔一段時間就去呼叫一次~~~

每隔一段時間就去下數一個~~~


在 button click之後 我要去取得 數值  也就是次數的值






label 記得  int.Parse(..)  把 字串轉型一下







這時你看到他變成 了   負數   我們還可以再多加判斷去修正一下它

然後你就說   那我們就不要讓它   負數小於了還再數不就得了

恩恩   聽起來不錯'很合理







然後你就開始懊惱了   怎麼回事   幹嘛 一直蹦跳出提示視窗

因為我程式運行    當它  等於0就不會再繼續做下去 就會一直是0

然後就掛在哪裡     永遠的0

所以就會不斷跳   視窗

我們要記得關閉   計數器

要在  秀之前



通常像這種情況我們會發現我們完全不用迴圈!!!!

但是它做了迴圈應該有的事情!!!


timer 物件會有 像   迴圈般去幫你做累加計數  的 特性

這個自動計數是由視窗去自動呼叫的

而不是由你主導的!!!!!

在視窗系統中,最好不要試圖去佔據整個CPU去做捨麼很複雜的事情

盡可能簡單~~~

因為你佔據整個CPU就是浪費CPU時間

但是最後的結果   我們會發現

你佔據CPU這麼久時間  到底是要做捨麼  要非常清楚才可以

往往視窗系統我們要佔據少的時間

就算是要做一個   語音轉檔、影像處裡等等

需要很久時間

我們也是  轉換一下  然後控制權立即交還回去  or 建立另外一個程式去轉

另外一個程式去轉  比方說 多執行緒方式

這樣就不會干擾你前面的運作





以上就是 一個視窗程式設計的邏輯基礎應用筆記




留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header