C# 如何在WPF中初始化WebView2?

C# 如何在WPF中初始化WebView2?,c#,wpf,webview2,C#,Wpf,Webview2,我正在尝试在WPF应用程序中使用WebView2。我在和中也读到,我应该调用ensureCrewebView2Async()或设置Source属性以初始化WebView。如果我设置源代码,它会正确加载网页,但我不能这样做,因为我的内存中有html内容(不允许写入磁盘) 所以我尝试调用初始化方法: var webView = new WebView2(); webView.NavigationCompleted += Navigation_Completed; webView.Initializ

我正在尝试在WPF应用程序中使用WebView2。我在和中也读到,我应该调用
ensureCrewebView2Async()
或设置
Source
属性以初始化WebView。如果我设置
源代码
,它会正确加载网页,但我不能这样做,因为我的内存中有html内容(不允许写入磁盘)

所以我尝试调用初始化方法:

var webView = new WebView2();

webView.NavigationCompleted += Navigation_Completed;
webView.Initialized += new EventHandler((object sender, EventArgs e) => { 
    webView.NavigateToString(myHtml);
});

await webView.EnsureCoreWebView2Async(null);
此代码的运行被
ensureCrewebView2Async()
方法阻止。我甚至可以等一分钟,但什么也没发生,只是在初始化中卡住了。没有异常,没有错误消息。 我在UI线程上运行此代码,但在另一个线程上调用此方法时也发生了同样的事情


有人经历过这种行为吗?有什么想法吗?

要手动显示
webview 2
,必须将其添加到表单的
控件
集合中

在表单上放置WebView2时,设计器会自动执行此操作

简单地说:

Controls.Add(webView)
await webView.EnsureCoreWebView2Async(null);
现在您应该能够显示您的html了

更新

您仍然可以在表单上删除
WebView2
,如果愿意,只需不要设置
Source
属性。

然后,您可以使用设计器分配事件处理程序,并在
Initialized
事件中调用:

webView.NavigateToString(myHtml);

正如您现在所做的。

如果您需要转到特定的URI,我必须执行以下调用

如前所述,不要在XAML中设置
Source
属性

请注意,
wv
是我的
WevView2
名称。重要的一点是,您仍然需要等待CoreWebView2加载。现在您可以将任何URI字符串替换为“https://www.microsoft.com"


当然,您应该调用
EnsureCoreWebView2Async
函数。通过
Controls.Add(webView)
    private async void wv_Initialized(object sender, EventArgs e)
    {
       await wv.EnsureCoreWebView2Async(null);
       wv.CoreWebView2.Navigate("https://www.microsoft.com");
    }