我遇到了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);
}
}
答案 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;
}
}
现在,您可以删除thread1Step
和TempBrowser_LoadCompleted
方法。只需使用
await TempBrowser.NavigateAsync(url);
DoYourWork(); //At this point your page is loaded. Read its content...