gpt4 book ai didi

c# - Cefsharp 第二次初始化抛出错误

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:37 26 4
gpt4 key购买 nike

我的应用程序需要根据请求调用(屏幕外)浏览器,并在完成后进行清理。

所以我创建了一个离屏浏览器

 public class OffScreenBrowser 
{
private static ChromiumWebBrowser _browser;

private static CefSettings _settings;

public void Load(string url,System.Drawing.Size size)
{
if (Cef.IsInitialized) return;
Init(new BrowserProcessHandler());

_browser = new ChromiumWebBrowser(url) {Size = size};
_browser.NewScreenshot += _browser_NewScreenshot;
}
public System.Windows.Controls.Image BrowserImage { get; set; }
public Action NewScreenShotAction { get; set; }

private void _browser_NewScreenshot(object sender, EventArgs e)
{
var bitmap = _browser.ScreenshotOrNull();
Application.Current.Dispatcher.Invoke(new Action(() =>
{
using (MemoryStream memory = new MemoryStream())
{
bitmap.Save(memory, ImageFormat.Png);
memory.Position = 0;
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memory;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();

BrowserImage = new System.Windows.Controls.Image() {Source = bitmapImage};
NewScreenShotAction();
}
}));
}

public void Close()
{
_browser.NewScreenshot -= _browser_NewScreenshot;
_browser.Dispose();
_settings.Dispose();
Cef.Shutdown();
}

public static void Init(IBrowserProcessHandler browserProcessHandler)
{
_settings = new CefSettings();
if (!Cef.Initialize(_settings, true, browserProcessHandler))
throw new Exception("Unable to Initialize Cef");
}
}

想法是点击一个按钮创建浏览器,点击另一个按钮关闭浏览器

private OffScreenBrowser offScreenBrowser;

private void OPen_OnClick(object sender, RoutedEventArgs e)
{
var address = @"https://www.google.co.uk";
var width = 200;
var height = 100;
var windowSize = new System.Drawing.Size(width, height);
offScreenBrowser = new OffScreenBrowser();
offScreenBrowser.Load(address, windowSize);

offScreenBrowser.NewScreenShotAction = () =>
{
Browser.Content = offScreenBrowser.BrowserImage;
};
}

private void Close_OnClick(object sender, RoutedEventArgs e)
{
offScreenBrowser.Close();
}

第一次点击一切正常。单击关闭时,清理似乎没问题。

但是当我第二次点击打开按钮时,出现如下异常

"An unhandled exception of type 'System.AccessViolationException' occurred in CefSharp.Core.dll

Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt."

我做错了什么?

最佳答案

这是 Chromium 框架的一个限制。

CEF 每个进程只能初始化/关闭一次,参见 Need to Know/Limitations有关更多详细信息,这是底层 Chromium 框架的限制。

关于c# - Cefsharp 第二次初始化抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43190462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com