Определить сходство потоков .NET для объектов, которые не реализуют ISynchronizeInvoke - PullRequest
0 голосов
/ 23 февраля 2012

Я понимаю, что ISynchronizeInvoke - это обычный способ определить, имеет ли объект сходство с потоками.Но я нашел объекты (по крайней мере, в Windows Forms), которые не реализуют это, но все еще имеют сродство с потоками.Есть ли более общий способ выяснить сходство?

Мой пример - System.Windows.Forms.TreeView.Это элемент управления, он реализует ISynchronizeInvoke, и все очень просто.У него есть свойство Nodes, которое возвращает коллекцию TreeNodeCollection.Эта коллекция НЕ реализует ISynchronizeInvoke, но она все еще имеет ту же привязку к потоку, потому что ее методы в конечном итоге будут вызывать методы родительского класса TreeView.

Моя проблема в том, что мое приложение имеет механизм очень общего назначения, в котором пользователь может использовать программу для вызова произвольных свойств и методов в любом классе .NET, и эти вызовы распределяются между несколькими потоками за кулисами.TreeViewCollection - это всего лишь один пример, в котором у меня нет возможности узнать, следует ли мне маршалировать вызов соответствующего потока.Когда он приходит, у меня просто есть Объект, и я не могу узнать, откуда он.

Так есть ли более общий способ определения соответствия потоков в этой ситуации?

Спасибо, Фил

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Вы можете вспомнить поток, который зарегистрировал объект в вашем приложении, а затем перенаправить обратный вызов в него. Вы можете использовать System.Threading.SynchronizationContext.Current , чтобы получить текущий контекст синхронизации для неизвестных объектов. Существует большая вероятность, что это даст вам желаемое поведение.

0 голосов
/ 24 февраля 2012

Не существует общего способа определения соответствия потоков. ISynchronizeInvoke не должен быть таковым. Извините; -)

Нет общего способа, кроме документации.

Возможно, вы сможете заставить свой код вызова понимать известные объекты в winforms (другими словами, имена жестких кодов и пространства имен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...