Đối với tôi, mã sau hoạt động. Các câu trả lời từ @Akash và @Mikko đặt tôi trên con đường đúng, nhưng tôi vẫn gặp một số vấn đề với một vài trang web. Vấn đề như tôi hiểu đó là sự kiện điều hướng được nâng lên khi thành phần WebBrowser
bắt đầu nhận dữ liệu từ máy chủ từ xa. Vì vậy đối tượng DOM chưa hoàn thành, do đó, gọi document.title
sẽ phát sinh lỗi. Vì vậy, tôi chỉ thử lại sau một vài phần nghìn giây cho đến khi tôi nhận được danh hiệu. "Vòng lặp" này chưa bao giờ lặp lại nhiều hơn 3 lần trên bất kỳ trang web nào tôi đã thử nghiệm và hoàn hảo mang lại cho tôi tựa đề đó mọi lúc.
private void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
ThreadPool.QueueUserWorkItem(UpdateText);
}
private void UpdateText(object o)
{
Thread.Sleep(100);
Dispatcher.BeginInvoke(() =>
{
try
{
textBlock1.Text = webBrowser1.InvokeScript("eval", "document.title").ToString();
}
catch (SystemException)
{
ThreadPool.QueueUserWorkItem(UpdateText);
}
});
}
Như David đã nói, để làm việc đúng cách, điều này phải được gọi trong trình xử lý sự kiện ** WebBrowser.LoadCompleted **. Ngoài ra, vì điều này đang được thực thi trong một trình xử lý sự kiện, mã trên nên được gọi trong hành động của 'Control.Invoke' cho WPF hoặc' Dispatcher.Invoke' cho Silverlight/Windows Phone nếu giao diện người dùng đang được cập nhật. – Ben