C# 重新启动已释放的窗体
父窗体启动通过CEFSharp嵌入Chromium嵌入框架的子窗体。用户可以关闭子窗体。用户可以重新启动子窗体。当这种情况发生时,应用程序终止C# 重新启动已释放的窗体,c#,cefsharp,C#,Cefsharp,父窗体启动通过CEFSharp嵌入Chromium嵌入框架的子窗体。用户可以关闭子窗体。用户可以重新启动子窗体。当这种情况发生时,应用程序终止 if (debugForm == null || debugForm.IsDisposed) { if (debugForm != null && debugForm.IsDisposed) { debugForm = null; } debugForm = new CEFdebugger(); .... }
if (debugForm == null || debugForm.IsDisposed)
{
if (debugForm != null && debugForm.IsDisposed)
{
debugForm = null;
}
debugForm = new CEFdebugger();
....
}
表单运行一次后,关闭并重新启动该行
debugForm = new CEFdebugger();
导致应用程序终止。在输出窗口中,我有
... has exited with code 1073741855 (0x4000001f)
根据这一点,我应该启用调试非托管代码,但这似乎没有帮助。
在我添加的调试程序的FormClosing事件中
private void CEFdebugger_FormClosing(object sender, FormClosingEventArgs e)
{
Cef.Shutdown();
this.Controls.Remove(browser);
browser = null;
}
那没用。应用程序刚刚终止。问题是由语句引起的
if (debugForm == null || debugForm.IsDisposed)
{
if (debugForm != null && debugForm.IsDisposed)
{
debugForm = null;
}
debugForm = new CEFdebugger();
....
}
Cef.Shutdown();
在CEFU FormClosing中。通过注释并在表单构造函数中测试Cef.i初始化,问题得到了解决。您不应该重新打开同一个表单实例-您应该创建一个新实例。
browser
是COM组件吗?顺便说一句,您永远不需要在代码中执行GC.Collect()
。你为什么要这样做?@DanielA.White-除非我在OP的代码中遗漏了它,否则他不会试图重新打开同一个表单实例。@Enigmativity这是试图解决问题,没有任何区别,所以我将编辑这个问题。我们如何知道Cef.Shutdown()是什么代码>是什么?在这里,您需要确保在提问时发布一条消息。CEF
框架的限制意味着您只能初始化
和关闭
一次。