web-dev-qa-db-ja.com

WebView2のオブジェクトであるMyewebView2がNULLの理由

Microsoft.Web.WebView2.WinForm.WebView2のオブジェクトを作成していますが、このCorewebView2の副obsectはnullです。

Microsoft.Web.WebView2.WinForm.WebView2 webView = new Microsoft.Web.WebView2.WinForm.WebView2()
// Change some GUI properties of webView
webView.CoreWebView.NavigateUrl(url)
// I can not access the above line because CoreWebView is null
 _
3
Abbas Tambawala

@abbasタンバワラはコメントで言ったように、あなたはあなたのプロジェクトが特定のビットさんに設定されていることを確認する必要があります。デフォルトのデフォルトの "anycpu"設定が機能しますが、コントロールは初期化されないように見えます、_await webView.EnsureCoreWebView2Async_は決して完了しないタスクを返します、_CoreWebView2_( - somecode)__はNULLになります、その他の症状はあなたのプロジェクトでその設定をチェックするための手がかりになります。

また、私がいたように、複数のプロジェクトを持つソリューションに取り組んでいる場合は、すべてのプロジェクトが正しくフラグが立てられていることを確認する必要があります。

DLLプロジェクトiがx86としてマークされていましたが、DLLをロードしたプロジェクトは "anycpu"でマークされました。 WTFの多くの瞬間が起こっています... Ryanの答えへの「32ビットを好む」というコメントは "Ah-HA"の瞬間を与えました。

また、WebView2.Sourceを設定するか、またはEnsureCorewebView2asyncを呼び出すかを確認するかどうかを確認したい場合があります.WEBView2は、完全に初期化されたUIスレッドと表示されている形式を必要とします。私は通常私のWebView2 Initコードをフォームに入れます.Shownイベント。これはイベントの順序の形式を説明するリンクです. ms-docs formイベント

0
J-Rome

WebView2.CorewebView2Readyイベントでブール変数を設定することで、私のVisual Basic Projectでこの問題を回避してから、フォームの有効化イベントで待機して変数を確認し、初期化されていることを確認してください。使用する

私は、すぐに使用する準備ができていて、Corewebview2はNULLに残っていたが、これはvbのことであるかもしれません。

これは私のWebView2 Visual Basic ProjectからC#に変換された例です。

class SurroundingClass
{
    private bool FstRun = true;
    private bool WebReady = false;

    private void Form1_Activated(object sender, EventArgs e)
    {
        if (FstRun == true)
        {
            FstRun = false;
            InitAsync();
            Wait();  // wait for webview to initiaise
           // code or sub here to reference the control navigate ect
        }
    }
    private void WebView21_CoreWebView2Ready(object sender, EventArgs e)
    {
        WebReady = true;
    }

    private async void InitAsync()
    {
        await WebView21.EnsureCoreWebView2Async;
    }

    private void Wait()
    {
        while (!WebReady == true)
            System.Windows.Forms.Application.DoEvents();
    }
}
 _
0
Chris Cullen