在 C# 中开发时,我多次遇到过这个问题。我会愉快地编码,在线程之间来回传递对象等等,然后突然之间我得到了这个熟悉的错误:
“调用线程无法访问此对象,因为不同的线程拥有它。”
好吧,我以前处理过它,尤其是 GUI 线程上的对象。您只需要编写一些额外的代码来围绕该特定问题进行编程。但是每隔一段时间我就会遇到一个很普通的对象,但它不喜欢被不同的线程访问。
编辑我在原来的帖子中弄错了导致访问异常的对象。它不是IPAddress,而是它的System.Printing.PrintQueue。我用来获取IP地址的。这是您无法从超过 1 个线程中评估的对象。
我写的所有课程都没有这个问题。我什至不知道我自己会如何实现它。您是否必须使用创建您的线程 ID 保留一个成员变量,然后在每个属性和方法访问时检查当前线程与该变量是否一致?这似乎很疯狂。为什么微软会决定......“好吧...... PrintQueue,绝对不能在线程之间共享。但是这些其他类......它们很好。”
为什么某些对象被多线程访问阻止?