从动态加载的DLL中显示表单
这是我之前在这里提出的问题的扩展。
简而言之,我使用以下代码动态加载DLL并使用它来创建type
:
Assembly assembly = Assembly.LoadFile("C:\test.dll"); Type type = assembly.GetType("test.dllTest"); Activator.CreateInstance(type);
从那里我可以使用type
来引用dllTest
类中的几乎任何东西。 默认情况下,该类在运行时应该显示一个表单(在这种情况下,相当空白,因此它并不复杂)。
我觉得我在这里错过了一个关键的代码行,这样可以防止表单在屏幕上加载。
dllTest.cs
(在DLL中)包括:
namespace test { public partial class dllTest : Form { public dllTest() { InitializeComponent(); } } }
InitializeComponent()
设置表单的布局,这个太长了,无法在此处粘贴,不应该有所作为。
有任何想法吗?
您必须对刚刚创建的表单执行某些操作:
Assembly assembly = Assembly.LoadFile("C:\test.dll"); Type type = assembly.GetType("test.dllTest"); Form form = (Form)Activator.CreateInstance(type); form.ShowDialog(); // Or Application.Run(form)
是的,您实际上并未指定在类初始化程序之外运行的任何代码。 例如,对于表单,您必须实际显示它们。
您可以将代码修改为以下内容……
Assembly assembly = Assembly.LoadFile("C:\test.dll"); Type type = assembly.GetType("test.dllTest"); Form form = Activator.CreateInstance(type) as Form; form.ShowDialog();
如果类属于Form
则Assembly.GetType()
返回NULL
。 如果一个类属于User Control
那么我可以看到返回的类型。
语法也应如下:
Type type = assembly.GetType("Assemblytest.clsTest");
哪里
我会选择:
Assembly assembly = Assembly.LoadFile("C:\test.dll"); Type type = assembly.GetType("test.dllTest"); object obj = Activator.CreateInstance(type); Form form = obj as Form; if (form != null) form.Show(); //or ShowDilaog() whichever is needed
应添加其他错误检查/处理; 但至少我会确保转换工作。
上述就是C#学习教程:从动态加载的DLL中显示表单分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/954076.html