【发布时间】:2020-02-21 20:55:51
【问题描述】:
我有一个 Windows 窗体应用程序,它在启动时启动一个带有侦听客户端的套接字连接的新线程。
当这个套接字从客户端接收到一个值时,这个值应该在主父线程上使用,而子线程继续运行这个套接字。
这是因为:
- 当套接字接收到值时,它会调用一个事件处理程序,然后调用一长串方法。这些方法将接收到的值添加到现有数据结构并更改 UI。
- 我需要添加此值的对象在子线程中似乎为空。所以我想我需要将值传递回父线程 - 而不停止子线程。
- 仅从线程返回值似乎不是解决方案,因为这会阻止套接字运行。
如何在不停止子线程的情况下将值从子线程传递给父线程?
【问题讨论】:
-
“我需要添加这个值的对象在子线程中似乎为空。所以我想我需要将值传递回父线程”我不太明白这种情况。为什么在主线程上创建的对象会在第二个线程中突然变成
null?听起来问题出在其他地方 -
"如何在不停止子线程的情况下将值从子线程传递给父线程?"你可以使用一个事件。
-
好的。那么不同的线程确实可以访问相同的对象实例吗?谢谢
-
“所以不同的线程确实可以访问相同的对象实例?” 是的,这就是为什么您可以获得Cross-thread operation not valid Exception
-
我们找到了抛出跨线程异常的艰难方法,以避免人们在调用时吝啬:stackoverflow.com/a/14703806/3346583 |线程在您不知道原因的情况下停止的事实表明您的异常处理没有正确地公开线程的异常。这是一个严重的错误。我必须在我经常链接的那个问题上发表文章:blogs.msdn.microsoft.com/ericlippert/2008/09/10/… | codeproject.com/Articles/9538/…
标签: c# multithreading sockets