将一个对象传递给默认 AppDomain,以从进程内创建的子 AppDomain 接收回调

2024-03-28

地点:

  1. 我正在从我的进程创建一个子应用程序域来加载程序集。
  2. 我能够调用此 AppDomain。
  3. 我想将一个对象从我的默认进程 AppDomain 传递到这个新创建的 AppDomain,以接收从新 AppDomain 中加载的程序集到我的默认 AppDomain 的回调。

我发现的一种方法是使用 AppDomain.DoCallback 方法,但不确定如何在我的子 AppDomain 中获取我的主机 AppDomain?

任何机构有任何想法来实现它吗?


总体思路是将派生自的类的实例传递给新创建的域MarshalByRefObject班级。它将保证该对象将通过引用而不是通过值进行封送。这意味着代理将被传递到新域而不是原始对象(该代理将由 .NET 框架为您生成)。

稍后,当您在此代理上调用方法时,此调用将被传递回原始域(创建对象的域)。换句话说,方法将在原始域中执行。

下面的代码展示了这个想法:

public class Program
{
    private static void Main(string[] args)
    {
        var listener = new Listener();
        var otherDomain = AppDomain.CreateDomain("otherDomain");

        var instance = (Loader)otherDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, typeof(Loader).FullName);
        instance.Init(listener);
    }
}

[Serializable]
public class Loader 
    : MarshalByRefObject
{
    public void Init(Listener listener)
    {
        Console.WriteLine($"[{nameof(Init)}] Hello from {AppDomain.CurrentDomain.FriendlyName} domain");
        listener.Callback();
    }
}

[Serializable]
public class Listener 
    : MarshalByRefObject
{
    public void Callback()
    {
        Console.WriteLine($"[{nameof(Callback)}] Hello from {AppDomain.CurrentDomain.FriendlyName} domain");
    }
}

当您运行此代码时,您将得到以下结果:

[Init] Hello from otherDomain domain
[Callback] Hello from Sandbox.vshost.exe domain

它表明 Init 方法是在新域中执行的,但回调是在原始域中执行的。现在注释 2 行: MarshalByRefObject并再次运行该程序。这次Listener将按值传递到新域,结果将是:

[Init] Hello from Sandbox.vshost.exe domain
[Callback] Hello from Sandbox.vshost.exe domain
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将一个对象传递给默认 AppDomain,以从进程内创建的子 AppDomain 接收回调 的相关文章

  • C# 打印问题(RichTextBox)

    我想打印我的 RichTextBox eintragRichTextBox 的内容 我现在有这个代码 private void druckenPictureBox Click object sender EventArgs e PrintD
  • json.net自定义jobject反序列化

    我正在尝试使用 JsonConvert DeserializeObject string 将字符串反序列化为可与动态一起使用的 jobject 来动态访问 json 文档 但是我想避免知道文档的大小写 以便我可以输入 dynamic doc
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T

随机推荐

  • Oracle SQl Dev,如何计算2个日期之间的工作日数

    有谁知道如何计算两个日期字段之间的工作日数 我正在使用 oracle sql 开发人员 我需要找到多个开始日期和结束日期之间工作日的平均值 因此 我需要获取每条记录的天数 以便对它们进行平均 这是可以作为一行完成的事情吗 SELECT我的查
  • 将“Future[Option[Future[Option[X]]]]”转换为“Future[Option[X]]”

    如何转型Future Option Future Option X into Future Option X 如果它是一个TraversableOnce代替Option我会用未来的伴生对象 http www scala lang org a
  • Console.ReadKey 取消[重复]

    这个问题在这里已经有答案了 可能的重复 如何向 Console ReadLine 添加超时 https stackoverflow com questions 57615 how to add a timeout to console re
  • 在 Visual Studio 中编译为独立可执行文件 (.exe)

    如何在 Visual Studio 中制作独立的 exe 它只是一个简单的控制台应用程序 我认为用户不会喜欢安装一个微小的控制台应用程序 我使用 Visual Studio 命令提示符编译了一个简单的 cpp 文件 即使未安装 NET Fr
  • 在 DataTrigger 内绑定 Storyboard 动画会导致 XamlParser 崩溃

    我希望我的应用程序在每次发生特定事件时将椭圆动画到新位置 出于测试目的 我制作了一个更改视图模型属性的按钮 并且该属性绑定到触发动画的数据触发器 但后来我希望视图模型根据我尚未实现的其他事件触发它 这就是为什么我可以不要直接在视图中使用绑定
  • 如何在 Windows 上设置 git 存储库,然后在 Mac OSX 上对其进行推送/拉取

    我正在尝试设置一个基于 Windows 的 Web 服务器 但在 Mac OSX 上进行开发工作 我在 Windows 服务器上安装了 freeSSHd 和 msysGit 并在我想要的位置设置了一个存储库 我的 Mac 上也有 git 并
  • 使用 XCTest 进行异步性能测试

    我已经开始探索用于异步和性能测试的新 XCTest API 单独来看 WWMC 中的 Apple 示例运行良好 但我一直无法弄清楚如何将它们结合起来 我能想到的最好的方法如下 但运行时收到以下错误 API 违规 在未设置任何期望的情况下调用
  • 有没有办法从 applet 本身重新加载/刷新 java applet?

    我的小程序上有一个按钮 包含在浏览器中 我想通过以下两种方式之一重新加载或刷新整个小程序 刷新小程序本身 无需刷新浏览器 刷新整个浏览器 这可以在小程序内实现吗 使用 AppletContext showDocument 方法 applet
  • HTML5 视频无法在 Chrome 中加载,但在打开开发者控制台时可以工作

    我正在为客户开发一个网络应用程序 HTML5 视频标签存在问题 问题是该视频无法在 Chrome 中加载 但可以在 Safari Firefox 和 IE 上加载 所以我开始在 Chrome 中调试 但我发现如果我在打开控制台的情况下刷新页
  • C++ 中默认的 catch throw 语句按值传递还是按引用传递

    默认的catch语句是如何实现的catch 通过值或引用捕获异常 其次 默认怎么抛出throw 抛出异常 按值还是按引用 包罗万象的捕获物 根本不允许您访问异常对象 因此这个问题没有实际意义 更正 重新投掷throw 抛出原始对象 如果处理
  • Errno::ENOMEM:无法分配内存 - cat

    我有一项在生产环境中运行的作业 用于处理 xml 文件 xml 文件总共约为 4k 大小为 8 到 9 GB 处理后我们得到 CSV 文件作为输出 我有一个 cat 命令 它将所有 CSV 文件合并到我得到的单个文件中 Errno ENOM
  • “Greedy” 和 “Reluctant” 正则表达式量词有什么区别?

    来自Pattern http java sun com javase 6 docs api java util regex Pattern htmljava文档 Greedy quantifiers X X once or not at a
  • 如何通过 YouTube API 检索我自己的私人播放列表?

    我正在尝试找到一种方法从 YouTube 检索我自己的私人播放列表 以便在我自己的个人网站上显示 到目前为止 所有文档似乎都表明检索私人用户数据 如私人播放列表 需要您的网站users通过身份验证过程以提供他们自己的验证 就我而言 我不想要
  • 使用 Dlang 计算目录中的文件数

    我想要一种简单的方法来使用 D 来计算目录中的文件数量 据我从 D 手册中可以看出 dirEntries 返回一个范围 但它没有长度属性 因此 我必须用计数器迭代结果 或者收集传统数组中的名称 我可以找到它的长度 有更好的方法吗 auto
  • 单元测试 OSGi 组件

    我目前正在考虑 如何设计 OSGi 组件 以便使用 jUnit 和 Mockito 等框架轻松为其编写测试 由于 OSGi 增强了 DIP 因此模拟捆绑包间的依赖关系非常容易 依赖倒置原理 和注入器方法 例如 setter 通常存在 但是捆
  • 使用以下格式转换日期时间字符串:(yyyy-MM-dd'T'hh:mm:ss-zzz)

    我收到一个 JSON 字符串 其中包含如下所示的日期 2015 07 09T08 38 49 07 00最后一部分是时区 有没有一种标准方法可以将其转换为DateTimeOffset 这是我到目前为止所拥有的 var olu JsonCon
  • 如何在 OpenCart 中创建自定义的 SEO 友好 URL?

    如何在 OpenCart 中自定义系统 URL 例如 我想http example com index php route checkout cart http example com index php route checkout ca
  • AngularJs ng-repeat 带索引

    我想仅在单击显示按钮时在此部分中显示名称 我正在尝试使用索引进行检测 但没有成功 Code div a vm updateText a div class updateSection div div
  • AWS Lambda SQS 触发器在队列重新创建后未触发

    我一直在使用 terraform 定义一些 SNS 主题 然后使用 SQS 队列来订阅它们 然后这些队列具有由 SQS 触发的 lambda 并从这些队列中获取消息 Terraform 处理 SNS 主题 SQS 队列的创建以及允许 SNS
  • 将一个对象传递给默认 AppDomain,以从进程内创建的子 AppDomain 接收回调

    地点 我正在从我的进程创建一个子应用程序域来加载程序集 我能够调用此 AppDomain 我想将一个对象从我的默认进程 AppDomain 传递到这个新创建的 AppDomain 以接收从新 AppDomain 中加载的程序集到我的默认 A