用c#写的个能到时间自动填写网页的程序。
但遇到问题:是winform用webBrowser做的。网页上的“用户名”这项,在winform上正常的点击按钮“button1”能顺利执行,但放到System.Timers中去执行的时候,就报错了。先贴上代码:    public partial class Form1 : Form
    {
        
        Element el = new Element();        System.Timers.Timer t = new System.Timers.Timer(1000);          //设置时间间隔为1秒
        System.EventArgs ab = null;
        object ss = null;        public Form1()
        {
            InitializeComponent();
        }        private void Form1_Load(object sender, EventArgs e)              //form载入
        {
            webBrowser1.Navigate("https://login.taobao.com/");
            t.Elapsed += new System.Timers.ElapsedEventHandler(Timer_TimesUp);
            t.AutoReset = false;     //每到指定时间Elapsed事件触发一次
            
        }       //下面这个是正常的点击按钮“button1”,能正常执行
        private void button1_Click(object sender, EventArgs e)         
        {
            HtmlElement eq = webBrowser1.Document.All["TPL_username"];
            eq.SetAttribute("value", "damao1977");
        }                private void btnStart_Click(object sender, EventArgs e)             //自动执行按钮
        {
            t.Enabled = true; //是否触发Elapsed事件
            t.Start();
        }
        
        //timer应该执行的事件,和上面的“button1”的完全一样,但就是报错
        private void Timer_TimesUp(object sender, System.Timers.ElapsedEventArgs e)   
        {
            HtmlElement eq = webBrowser1.Document.All["TPL_username"];
            eq.SetAttribute("value", "damao1977");
        }
    }
小弟新手,请高手帮忙看一下,非常感谢

解决方案 »

  1.   

    根据错误提示是要强制转换的值超出范围了
    建议断点调试,查看一下TPL_username的值
      

  2.   

    点了按钮和不点按钮可能会影响你的窗体得到焦点或者影响焦点的位置,是否这个原因引起你在Timer中的代码执行失败
      

  3.   

    timer在窗体一创建就开始工作了,这个时候你不能保证webbrowser的 Document都加载完毕,所以定时器中访问就可能访问到无法访问的元素
      

  4.   

    我是想要在Timer_TimesUp里面实现这个给 TPL_username 的文本框输入用户名,可以用别的什么写法吗? 
      

  5.   

    改成这样试试:
    private void Form1_Load(object sender, EventArgs e)              //form载入
    {
         t.Stop();
         webBrowser1.Navigate("https://login.taobao.com/");
         webBrowser1.DocumentCompleted += (o, args) => t.Start();
         t.Elapsed += (o, args) => BeginInvoke(new Action(() => Timer_TimesUp(o, args)));
         t.AutoReset = false; //每到指定时间Elapsed事件触发一次
    }
      

  6.   

    设置断点,看看webBrowser1.Document.All["TPL_username"]是什么,很有可能页面还没有载入结束。
      

  7.   

    谢谢jshi123,确实ok了!结贴给分!
    也谢谢大家热情相助,这里真是个好地方。