我正在更新vb6中通过COM互操作调用Winform C#dll的程序。在此C#dll中,winform包含一个实例化Internet Explorer(.NET默认浏览器)的Web浏览器。对于兼容性问题,我需要嵌入Chromium。我决定选择CefSharp。
我已经在C#中建立了一个名为dll的测试项目,并且工作正常。 我已经阅读了CefSharp Wiki,它们精确地从主UI线程初始化/关闭Cef。因此,我在C#中声明了两个在VB6中直接调用的方法。 问题是:表单可以很好地加载并且带有CefSharp的浏览器正在运行。当我关闭表单并想再次启动它时,应用程序将关闭。 我还尝试在C#dll中初始化/关闭CefSharp,但没有成功。
关于在这种情况下如何正确使用CefSharp的任何想法? 谢谢
Public gTest as boolean
Option Explicit
Public Function LaunchDLL() As Boolean
Dim oExtApp: Set oExtApp = CreateObject("TestCefSharp.Class2")
Dim test As Boolean
Dim bResult As Boolean
LaunchDLL = False
On Error GoTo Erreur
If gTest = False Then
oExtApp.InitializeChromium
gTest = True
End If
LaunchDLL = oExtApp.LaunchingForm
Set oExtApp = Nothing
Exit Function
Erreur:
MsgBox Err.Description
End Function
Public Sub LaunchBrowser_Click()
Dim test As Boolean
Dim Chrome As Boolean
test = LaunchDLL()
End Sub
namespace TestCefSharp
{
public interface IExternalApp
{
bool LaunchingForm();
bool InitializeChromium();
bool ShutdownChromium();
}
public abstract class CExternalApp : IExternalApp
{
public CExternalApp()
: base()
{
}
public bool LaunchingForm()
{
bool test = false;
MessageBox.Show("Starting");
Form1 form1 = new Form1();
DialogResult result = form1.ShowDialog();
if (result == DialogResult.OK)
{ test = true; }
else
{ test = false; }
return test ;
}
public bool InitializeChromium()
{
MessageBox.Show("Chromium initialized");
bool result = false;
try
{
CefSharpSettings.SubprocessExitIfParentProcessClosed = true;
CefSharpSettings.ShutdownOnExit = false;
Cef.EnableHighDPISupport();
var settings = new CefSettings()
{ CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Cache")};
Cef.Initialize(settings);
result = true;
}
catch
{ }
return result;
}
public bool ShutdownChromium()
{
MessageBox.Show("Chromium ended");
bool result = false;
try
{
Cef.Shutdown();
result = true;
}
catch
{ }
return result;
}
}
}
答案 0 :(得分:0)
实际上,它不适用于VB6编辑器的调试模式... 如果我直接编译并启动可执行文件,则一切正常。
我必须进一步深入研究,但我认为这是因为VB6编辑器没有像VS2017在.NET中那样在调试中启动单独的线程。
无论如何,谢谢您的帮助。