最近公司增加了新的需求
使用.net core開發WPF
所以就順便學了C#
還記得在大學的時候就學過C#開發視窗程式
對這個語言實在是喜歡不上
也沒有想過說現在會突然用到
應該說在技能樹上
就沒想過要點這個
但就目前邊學邊寫的過程中
WPF其實也不是真的那麼糟
這次就記錄一些開發時遇到的小小問題
WPF基本上可以分為xaml(UI畫面)及邏輯編寫,中間則透過MVVM溝通
但公司沒有UI/UX設計師
只能自己切版
WPF切版跟網頁的切版比較像
跟在Qt layout時感覺有很大的差距
除此之外
在加上Binding這個特性後
UI的控制上變的方便許多
Qt需要用signal的方式以避免多執行控制主線程
但用MVVM加上Binding
前後端可以分開開發
只要文件寫好
相對應的Data就可以
如同前後端api文件一樣
如果只是小型的程式
使用MVVM會覺得很麻煩
但如果程式很大
MVVM的效果就會出現
不用一直想怎麼去控制主線程
後端不用知道操作前端
前端也不用知道後端做了什麼事情
這裡有個經驗就是
一開始懶的用MVVM
結果程式越長越大
後端整個很難控
最後還是回到了使用MVVM
難控的部份是在於Async及要頻繁的使用Dispatcher來控制UI
但MVVM
可以讓我們不用去擔心Dispatcher方面的多執行緒問題
編寫後面的邏輯則是會遇到GC的問題
因在之前不管是python或是golang也好
GC會主動的回收
但C#不太一樣
雖然這部分還沒有弄的太熟悉
但說明一下遇到的情況
因為需求
所以自己又封裝了一層Serial.Port的功能
但在快速的操作SerialPort時,總是很容易crash
明明每一次的動作之後都有正確的關閉
後來看了一些GC文章
光是close資源是不會釋放的
要用dispose的方式
當一個物件的Dispose()被呼叫後
亦即標示了這個物件為無效
則在第一次的GC回收行程中便會被回收
在增加了dispose之後
就再也沒有crash的問題了
而且還不能直接指向null
null只是減少參照
如果有其它變數指著他
參照就不會被回收
沒有留言:
張貼留言