Обработайте команду возврата в пользовательском ContextMenuHandler - PullRequest
0 голосов
/ 21 марта 2019

Я реализовал пользовательскую 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 не работает.Поток не имеет доступа к экземпляру браузера:

Вызывающий поток не может получить доступ к этому объекту, так как он принадлежит другому потоку.

Отсутствие логики диспетчеризации не 't решить проблему.

  1. Нужно ли явно обрабатывать Back -команду, используя оператор if (будет реорганизован в swicth-case, не беспокойтесь)
  2. Если да, то как?
  3. В общем, как мне получить диспетчер экземпляра веб-браузера?

1 Ответ

0 голосов
/ 25 марта 2019

Решение состоит в том, чтобы не включать Back -команду в регистр коммутатора и вместо этого возвращать 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;
}
...