作者asingular ()
看板C_Sharp
标题[问题] 利用even控制UI
时间Wed Jul 8 11:06:40 2009
我是c#初学者 不知这样的做法对不对..
一般在Form本身的method里想要控制UI,
只要呼叫this.BeginInvoke..
但现在.. 例如我在Form1里面实体化一个class C
并希望在C里面的thread执行过程中能去update UI介面
我的作法是这样 (从MSDN参考来的..)
1. 宣告一个event handler
public delegate void RefreshUIEventHandler(object sender, RefreshUIEventArgs e);
2. 在欲控制UI的class C里面宣告一个event
public event RefreshUIEventHandler RefreshUI;
3. 在Form1实体化C的时候,顺便将该物件的RefreshUI挂上事件处理常式
C m_c = new C();
m_c.RefreshUI += this.RefreshUIMethod;
4. 最後,实作Form1的RefreshUIMethod (假设要控制的控制项是listBox1)
void RefreshUIMethod( object sender, EventArgs e )
{
if( this.listBox1.InvokeRequired )
{
this.BeginInvoke( new RefreshUIEventHandler( RefreshUIMethod ),
new object[] {sender,e});
}
else
{
// 这里是实际控制UI的Code
listBox1....
}
}
我就样做就可以动了..
只是很多code都是msdn半学半卖加进去的
不知有没有什麽遗漏或是多余的地方...或是有比这个更好的方法..
烦请指教... thanks!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.251.164.146
※ 编辑: asingular 来自: 60.251.164.146 (07/08 11:12)
1F:→ nopeace:我都习惯定一个Interface(类似Listener),实作method再对 07/09 20:40
2F:→ nopeace:自己写的Class注册 07/09 20:41
3F:推 tomex:even=event? 07/12 14:30
sorry.. 拼错字了
※ 编辑: asingular 来自: 220.135.204.230 (07/19 08:21)