我理解ISynchronizeInvoke是确定对象是否具有线程关联的常用方法。但我发现对象(至少在Windows窗体中)没有实现这个但仍具有线程关联性。是否有更通用的方法来找出亲和力?
我的例子是System.Windows.Forms.TreeView。这是一个Control,它实现了ISynchronizeInvoke,一切都是hunky-dory。它有一个返回TreeNodeCollection的Nodes属性。此集合不实现ISynchronizeInvoke,但它仍然具有相同的线程亲和性,因为它的方法最终将调用父TreeView类上的方法。
我的问题是我的应用程序有一个非常通用的机制,用户可以使用该程序在任何.NET类上调用任意属性和方法,并且这些调用在后台分散到多个线程。 TreeViewCollection只是一个例子,我无法知道是否应该调用相应的线程。当它出现时,我只有一个对象,无法知道它来自何处。
在这种情况下,有更通用的方法来确定线程关联吗?
谢谢, 菲尔
答案 0 :(得分:1)
您可以记住在应用程序中注册Object的线程,然后将回调编组回来。您可以使用 System.Threading.SynchronizationContext.Current 来获取未知对象的当前同步上下文。很有可能它会给你想要的行为。
答案 1 :(得分:0)
没有通用的方法来确定线程关联。 ISynchronizeInvoke不是一个。对不起; - )
除文档外没有一般的方法。
也许你可以让你的调用代码理解winforms中的知名对象(换句话说,硬编码名称和名称空间)。