Я сталкивался с этой проблемой несколько раз, развиваясь в С#. Я буду счастливо кодироваться, передавая объекты туда и обратно между потоками, а что нет, то вдруг я получаю эту знакомую ошибку:
"Вызывающий поток не может получить доступ к этому объекту, потому что другой нить владеет им."
Хорошо, хорошо, я общался с этим раньше, особенно с объектами в потоке графического интерфейса. Вам просто нужно написать дополнительный код для программирования вокруг этой конкретной проблемы. Но каждый раз, когда я сталкиваюсь с объектом, который, во что бы то ни стало, является обычным, но ему не нравится доступ к другим потокам.
EDIT Я ошибался в своем первоначальном посте об объекте, который вызывал исключение доступа. Это не было IPAddress, вместо этого его System.Printing.PrintQueue., который я использовал для получения IP-адреса. Это объект, который вы не можете оценить более чем из 1 потока.
Все мои классы, которые я написал, никогда не имеют этой проблемы. Я даже не знаю, как это реализовать. Вам нужно было бы сохранить переменную-член с идентификатором потока, который создал вас, а затем проверить текущий поток на то, что каждый доступ к каждому свойству и методу? Это кажется сумасшедшим. Почему Microsoft решила, что..... "ОК... PrintQueue, определенно не разделяется между потоками. Но эти другие классы... их хорошо идти".
Почему некоторые объекты заблокированы от доступа к нескольким потокам?