Re: [問題] GUI與主程式的結合
※ 引述《Arton0306 (沒有怎麼辦)》之銘言:
: 修區網有一個project 做dhcp server
: 目前是有分做GUI的
: 另外還有寫主程式的
: 目前遇到一個問題是如何把GUI和主程式結合
: 兩者是有一些共同的變數的 這些變數放在主程式中
: 主要問題是gui和主程式都會修改這些變數
: 我們目前做法是 gui和主程式都各有一份變數
: 當程式開啟時 GUI會讀入一個資料檔,再手動設定一些東西 並且按下「開始」後
: 會開一個thread跑主程式,主程式這邊有一些function,讓gui可以利用這些
: function把資料傳過來,如addxxx() deletexxx() modifyxxx()。
: 而主程式也是利用gui那邊的一些函式把主程式這裡的一些物件傳過去。
: 例如當一個client端連過來,主程式處理完會發一個dhcppacket給他,如此會變動主程式
: 中的變數等,同時也要改變gui上的顯示(新增一個client端),這裡我們的做法是
: 在主程式中呼叫gui那邊的addyyy() deleteyyy() modifyyyy()。
: 如此又產生一個新問題,因為是由gui來呼叫主程式啟動的,gui看的到addxxx(),
: 但主程式看不到gui的addyyy() deleteyyy() modifyyyy()。
: 後來我們又想說把gui那邊的addyyy()直接擺到主程式中,而gui在呼叫主程式就同時把
: gui那些欄位表格的ref丟過來,因此就可以在主程式中直接修改gui。
: 同樣的,又有問題了。gui是由gui的main thread所建,而主程式是另一個thread,
: 要去修改gui必須要處理thread間的問題。這裡是有辦法解決的。
: 但是我想知道是否有更好的架構,
: 或者一般主程式和gui的結合是否有某種一般性的良好寫法呢?
event可能是你想要的
如果你的主程式(dhcp server)寫成一個類別 或是寫成元件
遇到這樣狀況就可以寫成該類別的一個event
然後在你的UI程式裡面宣告一個dhcp server的物件
這可以把要處理的資料送出去給UI程式裡被委派的function接
這樣你的主程式就不必煩惱會碰到UI的東西了
譬如backgroundWorker元件有個的RunWorkerCompleted事件
在UI程式會有個自動產生的function backgroundWorker1_RunWorkerCompleted
這可以去處理RunWorkerCompleted事件送過來的資料
資料都包在RunWorkerCompletedEventArgs裡面 像是error或是result等
這些資料要如何處理就跟backgroundWorker無關了 完全交給UI程式自由發揮
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.83.178
推
12/29 17:42, , 1F
12/29 17:42, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):