Решение ниже, спасибо Poul Bak и GrooverFromHolland за указание на мою плохую реализацию async, которая немного помогла. Я просто переместил назначение источника в тот же метод после ожидания, чтобы порядок операций был правильным, а также сначала должен был ожидать CoreWebView2Environment.CreateAsync. Не совсем уверен, почему это было необходимо из установленного места.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
InitWebviewAsync();
}
private async void InitWebviewAsync()
{
var userDataFolder = Setting.ExeShortcutPath + "iGo360UtilitySettingWPF.exe.WebView2";
var env = await CoreWebView2Environment.CreateAsync(null, userDataFolder);
if (webView != null)
{
await webView.EnsureCoreWebView2Async(env);
string url = AuthHelper._loginUrl;
webView.Source = new Uri(url);
}
}
Сообщение об исходной проблеме ниже:
В настоящее время у меня есть проект WPF, который отлично работает с элементом управления WebView2 при отладке приложения с помощью Visual Studio 2019 (16.6.1) с Target .NET Framework 4.6.1.
Также установлено следующее:
- Microsoft Edge (90.0.818.42)
- runtimes \ win-x86 \ native \ WebView2Loader.dll (это разрешило DLLNotFoundException)
Проблема возникает, когда я устанавливаю этот проект через vdproj и запускаю приложение. Обратите внимание, что это находится на том же компьютере, что и среда отладки, что кажется еще более странным.
При написании этой проблемы я определил причину ошибки, о которой упоминаю ниже. Устраняя эти ошибки, я скопировал из папки отладки следующее:
- iGo360UtilitySettingWPF.exe.WebView2 (это устранило новую ошибку, край не мог записать в каталог)
- Как лучше всего включить эти 2 каталога в vdproj и управлять ими, чтобы избавиться от необходимости вручную копировать или добавлять их в мой проект хакерским способом?
- После InitializeComponent (); вы вызываете InitAsync. В это время возможно, что окно или WPF-страница еще не загружены. Лучше инициализировать его в событии Loaded:
Теперь моя текущая ошибка находится в строке ожидания inz InitAsync:
System.Runtime.InteropServices.COMException: 'Эта операция вернулась, поскольку истек период ожидания. (Исключение из HRESULT: 0x800705B4) '
Ошибки, которые у меня были изначально, но они были устранены выше: при попытке загрузки элемента управления WebView2 происходит сбой приложения. Вот методы construct и init, в которых происходит сбой в строке ожидания в InitAsync:
public Login()
{
string url = AuthHelper._loginUrl;
InitializeComponent();
InitAsync();
if (webView != null)
{
webView.Source = new Uri(url);
//webView.NavigateToString(url);
}
}
private async void InitAsync()
{
await webView.EnsureCoreWebView2Async(null);
}
И средство просмотра событий регистрирует следующую ошибку:
Среда выполнения Microsoft Edge WebView2 (90.0.818.42)