Re: [問題] GUI與主程式的結合

看板C_Sharp作者 (MIIS)時間17年前 (2006/12/29 15:18), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #15bC52Fl (C_Sharp)
文章代碼(AID): #15bC52Fl (C_Sharp)