C# System.Windows.Forms.Timer对象从激活的程序集(插件)加载时不勾选

C# System.Windows.Forms.Timer对象从激活的程序集(插件)加载时不勾选,c#,winforms,reflection,plugins,C#,Winforms,Reflection,Plugins,我目前正在从事一个项目,该项目将程序集(插件)加载到主AppDomain空间(通过反射的Assembly.LoadFile()和Activator类)。作为带有插件的API的一部分,宿主应用程序可以请求控件派生的对象显示在宿主的窗体上 本质上,“宿主应用程序”是一个WinForms应用程序,可以加载包含控件的程序集。宿主应用程序加载程序集(通过Assembly.LoadFile()),然后从每个程序集请求控件。然后在表单上呈现控件(添加到容器) 通过控件,一切(按钮、标签、图像等)都可以正常工作

我目前正在从事一个项目,该项目将程序集(插件)加载到主AppDomain空间(通过反射的Assembly.LoadFile()和Activator类)。作为带有插件的API的一部分,宿主应用程序可以请求控件派生的对象显示在宿主的窗体上

本质上,“宿主应用程序”是一个WinForms应用程序,可以加载包含控件的程序集。宿主应用程序加载程序集(通过Assembly.LoadFile()),然后从每个程序集请求控件。然后在表单上呈现控件(添加到容器)

通过控件,一切(按钮、标签、图像等)都可以正常工作,并且是交互式的。但是,如果表单中使用了计时器(WinForms组件-而不是System.Threading.Timer),则它不会勾选。如果控件直接在主机中使用(当作为依赖项引用时),计时器将按预期滴答作响

有人知道WinForms Timer在从程序集加载时无法正确挂接到消息泵的问题吗?

不清楚“AppDomain space”是什么意思。猜测:这里有一个很好的例子,描述了在次要AppDomain中加载控件的危害。关键部分是这一部分,然后是如何使其工作的建议:

Windows窗体仅支持隔离 通过应用程序域访问顶级windows。信息技术 不支持父子关系 跨域关系。许多的 人们认为这是因为 控制权最终来自于 MarshallByRefObject,它可以 成功地被远程控制;这不是 对。控件上的某些接口 可以跨域远程,但 控件的API本身不支持 远程处理。当你看到异常时 声明对象不能被删除 远程,因为它不可序列化, 你看到的是有人 试图将远程代理强制转换为 控制

现在还不清楚“AppDomain空间”是什么意思。猜测:这里有一个很好的例子,描述了在次要AppDomain中加载控件的危害。关键部分是这一部分,然后是如何使其工作的建议:

Windows窗体仅支持隔离 通过应用程序域访问顶级windows。信息技术 不支持父子关系 跨域关系。许多的 人们认为这是因为 控制权最终来自于 MarshallByRefObject,它可以 成功地被远程控制;这不是 对。控件上的某些接口 可以跨域远程,但 控件的API本身不支持 远程处理。当你看到异常时 声明对象不能被删除 远程,因为它不可序列化, 你看到的是有人 试图将远程代理强制转换为 控制


注意-我没有在单独的AppDomain空间中使用控件。我使用的是Assembly.LoadFile(),它将程序集加载到当前(且仅限于)AppDomain空间中。请编辑您的问题,使其非常清楚。它被称为“主appdomain”。你还需要澄清“主持人”是什么意思。我修改了这个问题。我假设Assembly.LoadFile()足以解释所有内容都使用单个主AppDomain。注意-我没有在单独的AppDomain空间中使用控件。我使用的是Assembly.LoadFile(),它将程序集加载到当前(且仅限于)AppDomain空间中。请编辑您的问题,使其非常清楚。它被称为“主appdomain”。你还需要澄清“主持人”是什么意思。我修改了这个问题。我假设Assembly.LoadFile()足以解释一切都使用一个主AppDomain。