在自定义ContextMenuHandler中处理命令

问题描述 投票:0回答:1

我已经实现了自定义ContextMenuHandler

public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
{
    if (commandId == (CefMenuCommand)26501)
    {
        // custom logic
        return true;
    }

    if (commandId == CefMenuCommand.Back)
    {
        Dispatcher.CurrentDispatcher.Invoke(() =>
        {
            if (chromiumWebBrowser.CanGoBack) chromiumWebBrowser.Back();
        });

    }

    return true;
}

自定义命令按预期工作。但是,Back-command不起作用。该线程无权访问浏览器实例:

调用线程无法访问此对象,因为另一个线程拥有它。

省略调度逻辑并不能解决问题。

  1. 我是否需要使用if语句显式处理Back-command(将重构为swicth-case,无后顾之忧)
  2. 如果有,怎么样?
  3. 一般来说,我如何获得Web浏览器实例的调度程序?
chromium cefsharp
1个回答
0
投票

解决方案是不在switch-case中包含Back-command而是返回false。

public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
{
    if (commandId == (CefMenuCommand)26501)
    {
        // custom logic
        return true;
    } 

    return false;
}
© www.soinside.com 2019 - 2024. All rights reserved.