WPF WebBrowser没有加载

时间:2016-10-04 19:10:55

标签: c# wpf visual-studio webbrowser-control

我遇到了WebBrowser控件的问题。我已将其添加到其中一个窗口,但它不会加载我导航到的页面。我想从其他窗口访问控件,所以我做了像Navigate等公共方法。我尝试将WebBrowser添加到其他窗体,它似乎正常工作。它在没有任何添加代码的情况下在此窗口上工作。我正在使用AutoResetEvent,因此当网站加载时,它将继续该程序。谁能告诉我这段代码中的问题可能在哪里?

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }
    readonly AutoResetEvent thread1Step = new AutoResetEvent(false);
    public void EnterForm(string ElementId, string value)
    {
        HTMLDocument document = (HTMLDocument)TempBrowser.Document;
        document.getElementById(ElementId).innerText = value;
    }
    public void Navigate(string url)
    {
        TempBrowser.Navigate(url);
        thread1Step.WaitOne();
        thread1Step.Reset();
    }
    public void PressButton(string id)
    {
        HTMLDocument doc = (HTMLDocument)TempBrowser.Document;
        IHTMLElement btn = doc.getElementById(id);
        if (btn != null)
        {
            btn.click();
        }
    }
    public void Scroll(int n)
    {
        HTMLDocument doc = (HTMLDocument)TempBrowser.Document;
        doc.parentWindow.scroll(0, n);
    }
    private void TempBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        thread1Step.Set();
    }
    public void CallFunction(string Funct)
    {
        TempBrowser.InvokeScript(Funct);

    }
}

1 个答案:

答案 0 :(得分:0)

我根据我的其他answer ...

为WPF准备了一个异步代码
public static class MyExtensions
{
    public static Task NavigateAsync(this WebBrowser browser, Uri  uri)
    {
        var tcs = new TaskCompletionSource<object>();
        LoadCompletedEventHandler loadCompleted = null;

        loadCompleted = (s, e) =>
        {
            browser.LoadCompleted -= loadCompleted;
            tcs.SetResult(e.WebResponse);
        };

        browser.LoadCompleted += loadCompleted;
        browser.Navigate(uri);

        return tcs.Task;
    }
}

现在,您可以删除thread1StepTempBrowser_LoadCompleted方法。只需使用

await TempBrowser.NavigateAsync(url);
DoYourWork(); //At this point your page is loaded. Read its content...