我正在使用此代码来检查webBrowser1中的文本,但我得到错误“指定的强制转换无效”。为string docText = webBrowser1.Document.Body.InnerText;
。有什么想法吗?可能是因为我正在从另一个线程访问webBrowser吗?感谢。
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string docText = webBrowser1.Document.Body.InnerText;
if (docText == "Hello")
{
MessageBox.Show("Alerted!");
}
}
private void timer1_Tick(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
答案 0 :(得分:5)
实际上,异常可能是从非主要UI线程的线程访问WebBrowser.Document属性引起的。您可以通过在System.InvalidCastException
:
at System.Windows.Forms.UnsafeNativeMethods.IHTMLDocument2.GetLocation()
在System.Windows.Forms.WebBrowser.get_Document()
如果是这种情况,请尝试将网页内容作为参数传递给后台线程:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var docText = (string)e.Argument;
}
private void timer1_Tick(object sender, EventArgs e)
{
var docText = webBrowser1.Document.Body.InnerText;
backgroundWorker1.RunWorkerAsync(docText);
}
答案 1 :(得分:2)
我会尝试......
backgroundWorker1.RunWorkerAsync(webBrowser1.Document.Body.InnerText);
这将删除强制转换异常
和DoWork
string docText = e.Argument.ToString();
这将删除UI线程问题
答案 2 :(得分:0)
也许你应该在访问Document之前等待来自WebBrowser ctrl的DocumentCompleted事件。
答案 3 :(得分:0)
.Body部分将返回一个对象null引用异常,如果你没有等待加载页面,.innerHTML将不会被识别为字符串,它可能会触发你得到的错误。你有没有正确等待文件加载之前这一切?如果你需要帮助,请查看我的答案,了解如何正确等待webbrowser控件。