为未实现ISynchronizeInvoke的对象确定线程关联.NET

时间:2012-02-23 19:43:57

标签: c# .net winforms

我理解ISynchronizeInvoke是确定对象是否具有线程关联的常用方法。但我发现对象(至少在Windows窗体中)没有实现这个但仍具有线程关联性。是否有更通用的方法来找出亲和力?

我的例子是System.Windows.Forms.TreeView。这是一个Control,它实现了ISynchronizeInvoke,一切都是hunky-dory。它有一个返回TreeNodeCollection的Nodes属性。此集合不实现ISynchronizeInvoke,但它仍然具有相同的线程亲和性,因为它的方法最终将调用父TreeView类上的方法。

我的问题是我的应用程序有一个非常通用的机制,用户可以使用该程序在任何.NET类上调用任意属性和方法,并且这些调用在后台分散到多个线程。 TreeViewCollection只是一个例子,我无法知道是否应该调用相应的线程。当它出现时,我只有一个对象,无法知道它来自何处。

在这种情况下,有更通用的方法来确定线程关联吗?

谢谢, 菲尔

2 个答案:

答案 0 :(得分:1)

您可以记住在应用程序中注册Object的线程,然后将回调编组回来。您可以使用 System.Threading.SynchronizationContext.Current 来获取未知对象的当前同步上下文。很有可能它会给你想要的行为。

答案 1 :(得分:0)

没有通用的方法来确定线程关联。 ISynchronizeInvoke不是一个。对不起; - )

除文档外没有一般的方法。

也许你可以让你的调用代码理解winforms中的知名对象(换句话说,硬编码名称和名称空间)。