Я недавно обновил пакет NuGet файла cefsharp.wpf с 75.1.143 до 79.1.35, и теперь следующий код больше не работает:
public class Handle
{
string source = null;
int loaded = 0;
private RequestHandler _requestHandler;
public IWebBrowser _browser;
public int previousRequestNrWhereLoadingFinished = -1;
public Handle()
{
var settings = new CefSharp.Wpf.CefSettings()
{
CachePath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Cache")
};
settings.CefCommandLineArgs.Add("enable-media-stream", "1");
Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);
_browser = new CefSharp.Wpf.ChromiumWebBrowser();
_requestHandler = new RequestHandler();
_browser.RequestHandler = _requestHandler;
}
public void OnIsBrowserInitializedChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (_browser.IsBrowserInitialized)
{
status = 1;
}
//status = 0;
}
public async void _browser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
{
if (!e.IsLoading)
{
if (previousRequestNrWhereLoadingFinished < _requestHandler.NrOfCalls)
{
previousRequestNrWhereLoadingFinished = _requestHandler.NrOfCalls;
source = await _browser.GetBrowser().MainFrame.GetSourceAsync();
...
}
}
}
...
}
Полученная ошибка: «System.InvalidOperationException: 'Вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им.' '
В следующей строке:
source = await _browser.GetBrowser().MainFrame.GetSourceAsync();
Я не могу понять, почему это происходит до сих пор, вы можете помочь мне с этой проблемой, пожалуйста?
Это, вероятно, связано с изменениями в новой версии, я прочитал их, но я мог найти, что именно сломало это.
Спасибо за ваше время и помощь , это очень ценится.
Обновление: В соответствии с запросом в комментариях, здесь стековый вызов:
This exception was originally thrown at this call stack:
System.Windows.Threading.Dispatcher.VerifyAccess()
System.Windows.DependencyObject.GetValue(System.Windows.DependencyProperty)
CefSharp.Wpf.ChromiumWebBrowser.IsBrowserInitialized.get()
CefSharp.WebBrowserExtensions.ThrowExceptionIfBrowserNotInitialized(CefSharp.IWebBrowser)
CefSharp.Wpf.ChromiumWebBrowser.GetBrowser()
First_4_Figures.MainWindow.Handle._browser_LoadingStateChanged(object, CefSharp.LoadingStateChangedEventArgs) in MainWindow.xaml.cs
Я с удовольствием предоставлю дополнительную информацию, если потребуется.