我在C#中创建了一个COM Visible DLL,它应该在主机应用程序中用户的一些输入(非托管)之后显示一个Form。它适用于ShowDialog()
,但理想情况下,即使在DLL完成后,Form也应继续运行。由于表单需要一些数据,因此不能选择具有Main(string[] args)
的单独项目。
我怎样才能做到这一点?我尝试了类似的东西,但没有用。
public class FormManager : ApplicationContext
{
FormMain frmMain;
public FormManager()
:base(new FormMain())
{
frmMain = (FormMain)this.MainForm;
frmMain.Closed += new EventHandler(OnFormClosed);
}
public void SetData(object o1, object o2)
{
if (frmMain != null)
{
frmMain.SetData(o1, o2);
frmMain.Show();
}
}
private void OnFormClosed(object sender, EventArgs e)
{
ExitThread();
}
}
我不知道应该在哪里插入Application.Run
。
答案 0 :(得分:2)
我也有点不清楚你在这里尝试做什么 ...但通常情况下,如果你将Application.Run
置于该代码的某处,那么将取代这一行:
frmMain.Show();
当然,通过使用Application.Run
,您将冻结此代码(调用Application.Run的线程),直到相关表单关闭...所以也许这并不能真正实现您想要的(它确实不清楚。)
<小时/> 澄清问题后编辑
有一种解决方法,但并不简单。简而言之,您需要:
此时,两个程序集在不同的运行时中运行,允许您在第二个程序集中生成在第一个程序集关闭时不会关闭的表单。据我所知,这就是你在寻找的东西。
如果您想尝试这条路线,请为ROT做一点Google搜索并尝试一些示例代码。如果您对此有疑问,请告诉我们!