C# 重新启动已释放的窗体

C# 重新启动已释放的窗体,c#,cefsharp,C#,Cefsharp,父窗体启动通过CEFSharp嵌入Chromium嵌入框架的子窗体。用户可以关闭子窗体。用户可以重新启动子窗体。当这种情况发生时,应用程序终止 if (debugForm == null || debugForm.IsDisposed) { if (debugForm != null && debugForm.IsDisposed) { debugForm = null; } debugForm = new CEFdebugger(); .... }

父窗体启动通过CEFSharp嵌入Chromium嵌入框架的子窗体。用户可以关闭子窗体。用户可以重新启动子窗体。当这种情况发生时,应用程序终止

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
框架的限制意味着您只能
初始化
关闭
一次。