才发现直接操作会抛出异常,百度了下,有说用SendMessage,有说用postMessage,看了很久还是没有研究明白,发贴求助
//启动定时器
            System.Timers.Timer aTimer = new System.Timers.Timer();
            aTimer.Elapsed += new ElapsedEventHandler(online);
            aTimer.Interval = 10000;
            aTimer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
            aTimer.Enabled = true;
  private void online(object source, System.Timers.ElapsedEventArgs e)
        {
            WebClient Client = new WebClient();
            Stream strm = Client.OpenRead(weburl + "winform/" + "online.asp?cpuid=" + strCpuID);
            StreamReader sr = new StreamReader(strm);
            string online;
            online = sr.ReadLine();
            this.label1.Text = online.ToString();//修改label1显示,但抛出异常
        }具体如何处理呢?就是用子线程获取在线人数然后显示出来。请给下具体代码,谢谢!

解决方案 »

  1.   

     private delegate void MyDelegateUI();    if (label1.InvokeRequired)
                    {
                        MyDelegateUI d = delegate
                        {
                            this.label1.Text = online.ToString();
                        };
                        label1.Invoke(d);
                    }
                    else
                    {
                        this.label1.Text = online.ToString();
                    }
      

  2.   

    this.label1.Text = online.ToString();
    改成 
    this.label1.Invoke(
                    new Action(() => { label1.Text = online.ToString(); }),
                        null);
      

  3.   

    this.Invoke(new System.Action<object>(delegate { this.label1.Text="1234"; }), 1);