作者DearKurt (MIIS)
看板C_Sharp
标题Re: [问题] GUI与主程式的结合
时间Fri Dec 29 15:47:05 2006
※ 引述《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
1F:推 Arton0306:非常感谢呀!! 12/29 17:42