C# WinForms: System.InvalidCastException only from Timer.Ela



我已经使用WebBrowser创建了一个C#Winforms项目,并单独的控件单击WebBrowser中的某些按钮,到目前为止,这一切都很好。但是,这些按钮之一应该定期单击(我选择20秒进行调试(。我尝试使用系统。

webBrowser2.Document.GetElementById("link_logout").InvokeMember("click");

每当应该单击该按钮时(即此行在ElapsedeventHandler中(,我就会在此行中获得一个System.invalidcastException。当我尝试单击其他按钮或填写文本字段时,也会发生同样的情况。

奇怪的是,当我这样做时,单击按钮或填充文本字段正常工作。

问题显然不是因为HTML元素不存在,我在if子句中获得了同样的例外,在行中,if(element!= null(。

以下是我的代码:

System.Timers.Timer t = new System.Timers.Timer(20 * 1000);
SomeMethodAtTheStart()
{
   t.Start();
   t.AutoReset = true;
   t.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
   webBrowser2.Document.GetElementById("link_logout").InvokeMember("click");
}
private void tsmiConnect_Click(object sender, EventArgs e)
{
   webBrowser2.Document.GetElementById("link_logout").InvokeMember("click");
}

如果有人可以帮助我,我会非常感激。

来自msdn

与system.windows.forms.timer不同,system.timers.timer类将在从公共语言运行时(CLR(线程池中获得的工作人员线程上调用您的计时器事件处理程序。这意味着您经过的事件处理程序内的代码必须符合Win32编程的黄金法则:绝不应从用于实例化的线程以外的任何线程中访问控件的实例。>

改用System.Windows.Forms.Timer

编辑:在使用WebBrowser和Threads

的问题中,就像在此答案中

WebBrowser不喜欢从其他线程访问。

最新更新