【问题标题】:Simplest way to make cross-appdomain call?进行跨应用程序域调用的最简单方法?
【发布时间】:2011-09-08 17:05:30
【问题描述】:

我需要在另一个 appdomain 中调用对象的方法(传递参数并获取结果)。想法?

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

【问题讨论】:

    标签: c# .net clr ipc


    【解决方案1】:

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

    【讨论】:

    • 我不明白,如何用它传递参数/结果。
    • @user626528 您不能直接传递参数或获取结果。您可以做的是您可以使用您的应用程序域的SetData 和GetData 方法来执行此操作。
    【解决方案2】:

    如果您在另一个域中创建了一个对象,例如使用AppDomain.CreateInstanceAndUnwrap,调用另一个域中的对象只需调用对象的方法即可。

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

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

    【讨论】:

    • 我完全忘记了那个方法。实际上比使用 DoCallBack 更方便;)
    • 不错!是否可以使用这种方式进行回调?
    • @user626528 是的,但不仅仅是对象的一种方法的回调。如果您在另一个域中创建对象,则在该域中调用其所有方法。我想您应该创建一个负责回调的类,然后通过AppDomain.CreateInstanceAndUnwrap 在另一个域中创建该类的实例,最后在另一个域中调用该实例的方法。
    • @user626528 请参阅 UPD。
    猜你喜欢
    • 2011-06-14
    • 2019-09-26
    • 1970-01-01
    • 2011-07-27
    • 2019-05-22
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多