为什么我的对象被另一个线程使用? | 您所在的位置:网站首页 › threadstart_new_thread › 为什么我的对象被另一个线程使用? |
如果lbConnections是一个客户端控件,你不能从一个后台线程修改它 - 你必须调用,将做GUI线程上更新的方法。在GUI控件上实际上没有线程安全性,并且所有禁用Control.CheckForIllegalCrossThreadCalls的功能都会让您在脚下自拍时变得不那么明显。 一般而言,您还有其他问题。例如,您的处理程序线程总是试图抓取最后一个连接 - 在处理线程尝试抓取套接字之前,有两种连接可能发生(并且都会添加到nSockets中) - 这意味着一个套接字永远不会被抓住一个人抓住两次。另外,它看起来像你从来没有实际处理任何套接字对象,甚至不允许它们是GCd,因为我没有看到任何从nSockets中移除的代码。 你确实有两个很好的选择 - 要么传递处理线程所需的数据,要么使用类似队列的东西,并让处理线程出列一个套接字并对其进行操作(当然,所有的队列访问都必须同步)。无论哪种方式,你应该处理的插座,而不是永远保持它们。 |
CopyRight 2018-2019 实验室设备网 版权所有 |