ThreadPool 与 beginInvoke

qq2593010346 2012-10-13 04:59:50

在程序里 多次使用 ThreadPool 并在ThreadPool 的线程里调用 了程序里的其它控件.

为使不出错, 是不是得为每个线程里的控件 使用beginInvoke 和对应的 deligate 啊?

如果需要的话,那么不是非常麻烦吗?

求解,求思路
...全文
199 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ktei2008 2012-10-15
  • 打赏
  • 举报
回复
我不知道有什么麻烦的。你能举个例子么?
qldsrx 2012-10-14
  • 打赏
  • 举报
回复
的确不怎么方便,不过可以封装一个方法,通过反射方法名来调用(降低了效率)
如果不考虑XP,使用.NET4.5,将不在有多线程操作控件的麻烦,在.NET4.5里面有更好的方案处理多线程操作和控件的关系。关键字async将为你带来最大的便利。
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
在程序里 多次使用 ThreadPool 并在ThreadPool 的线程里调用 了程序里的其它控件.

为使不出错, 是不是得为每个线程里的控件 使用beginInvoke 和对应的 deligate 啊?

如果需要的话,那么不是非常麻烦吗?

求解,求思路
[/Quote]

什么叫“每个线程里控件”?

调用一句 BeginInvoke 有什么麻烦?请贴出你的代码说明。
qq286887534 2012-10-13
  • 打赏
  • 举报
回复
然后你所有controlObj.BeginInvoke都可以使用voidHandle类型,而非一一对应去声明委托.
qq286887534 2012-10-13
  • 打赏
  • 举报
回复
用lambda表达式
public Delegate void voidHandle()
controlObj.BeginInvoke((voidHandle)()=>{controlObj.Text="123";});
为了保证线程安全,必须由控件创建的线程来访问该控件,所以在子线程中,必须通过委托的方式让主线程来修改该控件的状态.
SocketUpEx 2012-10-13
  • 打赏
  • 举报
回复
     public FrmMain()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}




种草德鲁伊 2012-10-13
  • 打赏
  • 举报
回复
不需要

111,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧