2015-12-16 2 views
0

Родительская форма запускает дочернюю форму, которая встраивает встроенную структуру Chromium через CEFSharp. Пользователь имеет возможность закрыть дочернюю форму. Пользователь может перезапустить дочернюю форму. Когда это произойдет, приложение завершается.Перезапустите форму, которая расположена

if (debugForm == null || debugForm.IsDisposed) 
{ 
    if (debugForm != null && debugForm.IsDisposed) 
    { 
    debugForm = null; 
    } 
    debugForm = new CEFdebugger(); 
    .... 
} 

Когда форма была запущена один раз, закрыть и перезапустить линию

debugForm = new CEFdebugger(); 

вызывает применение прекратить. В окне вывода У меня есть

... has exited with code 1073741855 (0x4000001f) 

Согласно this thread это указывает на то, я должен включить отладку неуправляемого кода, но это, кажется, не помогли. В случае FormClosing для CEFdebugger Я добавил

private void CEFdebugger_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    Cef.Shutdown(); 
    this.Controls.Remove(browser); 
    browser = null; 
} 

Это не помогло. Приложение просто завершается.

+3

Вы не должны открывать один и тот же экземпляр формы - вы должны создать новый. –

+0

Является ли 'браузер' компонентом COM? – Enigmativity

+0

Кстати, вам никогда не понадобится делать 'GC.Collect()' в вашем коде. Почему вы это делаете? – Enigmativity

ответ

0

Проблема была вызвана заявлением

Cef.Shutdown(); 

в CEFdebugger_FormClosing. Комментируя это и тестируя Cef.IsInitialized в конструкторе формы, проблема была решена.

+0

Как мы узнаем, что такое 'Cef.Shutdown();' делает? Здесь вы должны убедиться, что вы отправляете сообщение [mcve] при задании вопроса. – Enigmativity

+0

Ограничение рамки CEF означает, что вы можете только «Инициализировать» и «Выключить» один раз. – amaitland

Смежные вопросы