2011-06-05 144 views
11

我需要调用另一个appdomain中的对象方法(传递参数并获取结果)。想法?使跨应用程序域调用最简单的方法?

UPD两个AppDomain都不是由我的代码创建的(主机应用程序创建它,然后我的代码被调用)。我如何从另一个AppDomain访问一个AppDomain?

回答

14

如果您在另一个域中创建了一个对象,例如与AppDomain.CreateInstanceAndUnwrap,所有你需要调用另一个域中的对象是调用一个对象的方法。

进行跨应用程序域调用的最简单方法就是直接对该对象进行调用,该对象实际上是通过其另一个域中存在的另一个域通过其代理公开的。

UPD
不幸的是,获得主机域并不那么容易。您应该枚举像this这样的域名,并在其中找到主机域名。我想你的主机域是方法AppDomain.IsDefaultAppDomain返回真正的

+0

我完全忘记了这种方法。其实比使用DoCallBack更方便;) – 2011-06-05 12:42:23

+0

不错!是否有可能使用这种方式进行回调? – user626528 2011-06-05 13:08:22

+2

@ user626528是的,但不仅仅是对象的一种方法的回调。如果您在另一个域中创建对象,则在该域中调用其所有方法。我想你应该创建一些将负责你的回调的类,然后通过AppDomain.CreateInstanceAndUnwrap在另一个域中创建该类的一个实例,最后在另一个域的实例上调用该方法。 – Centro 2011-06-05 13:25:03

3

这通常使用AppDomain.DoCallBack来实现。您需要确保如果您想传递参数,则需要创建一个可序列化的对象,该对象的方法将传递给上述方法。 在回调方法中,您可以执行另一个AppDomain回调以将结果传递回原始AppDomain。

+0

我看不到,如何传递参数/结果。 – user626528 2011-06-05 11:41:33

+1

@ user626528您无法直接传递参数或获取结果。你可以做的是你可以使用[SetData](http://msdn.microsoft.com/en-us/library/system.appdomain.setdata.aspx)和[GetData](http://msdn.microsoft.com /en-us/library/system.appdomain.getdata.aspx)您的应用程序域的方法。 – Prasad 2013-02-04 11:28:01

相关问题