作者maxi326 (新年是又冷又无聊)
看板C_Sharp
标题Re: [问题] 请教invoke的用法以及使用时机
时间Sat Apr 18 17:31:57 2009
※ 引述《mtm ( )》之铭言:
: 假设我有class A 跟class Form
: 先在Form里面new一个A
: 接着从Form的UI Thread去Call了A的method X
: (这时候X是在一个新的Thread里面跑吧?)
: 当我这个 X 跑完或是跑到中途的时候,我想要改动Form里面TextBox的内容
: 但是UI Thread似乎不会允许我这样做,尤其在使用.net compact framework时
: 就直接跳个error说要用control.invoke来做这样的事情
: 所以想请问,我应该要在new A这个class的时候把Form的this丢进去吗?
: 当然A这个class会先宣告一个 System.Windows.Forms.Form myForm = null;
: construct时 myForm = form
: 顺带问,即使我有了myForm,也应该不能直接做myForm.TextBox1.Text = "abc";
: 这样的动作吧?
: 我应该要怎麽做,才能从class A里面的某一个Method里面,去改动到Form的TextBox
: 另外一问,我如果要从Class A去call一个Form里面独立的public void Method()
: 可以直接 myForm.Method() 吗?还是说这个也得绕路?
: 目前有点昏头中,思绪一整个乱糟糟
: 我这边的观念实在是不太懂,而且我delegate也不太熟析
: 不知道有没有大大能做个范例详细解说一下,感激不尽 m(_._)m
你应该要NEW一个THREAD去做METHOD X
通常那叫做WORKER THREAD
然後想更新UI值时用CONTROL.INVOKE传一个DELEGATE去处理这件事
在DELEGATE的METHOD里用CONTROL.INVOKEREQUIRED
去判断这是UI THREAD还是WORKER THREAD
我之前也被DELEGATE弄得一头雾水,现在还是不太懂就是了
看看这能不能帮到你
http://maxi326.wordpress.com/2008/12/28/winforms-ui-thread-howto/
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.125.138.85