日期:2014-05-20  浏览次数:21122 次

System.Timers.Timer如何操作能传递win窗体label的text?急!急!急!
///定时器用来定时刷新
public   System.Timers.Timer   RWIOTimer   =   new   System.Timers.Timer();
public   int   i=0;
                public   void   initRWIOTimer()
                {
                        RWIOTimer.Elapsed   +=   new   System.Timers.ElapsedEventHandler(RWIOTimer_Elapsed);
                        RWIOTimer.Interval   =   2000;
                        RWIOTimer.AutoReset   =   true;

                }

                ///   定时器事件
                private   void   RWIOTimer_Elapsed(object   sender,       System.Timers.ElapsedEventArgs   e)
                {
                        i+=1;
                        label1.text=i.tostring();

                }
                  private   void   Form1_Load(object   sender,   EventArgs   e)
                {
                        RWIOTimer.Enabled   =   true;
                        initRWIOTimer();
                }
我想让label每隔2秒钟刷新一次数据,可是提示错误:用户代码未处理,线程间操作无效,从不是创建控件label1的线程访问它。
好像要用到委托,但对委托不了解,看了相关委托的介绍,看得一头雾水,有哪位知道这样的问题该怎么处理???
很着急,赶紧帮帮忙!

------解决方案--------------------
private delegate void UpdateText(int i);

private void OnUpdateText(int i)
{
if(this.InvokeRequired)
{
UpdateText dele = new UpdateText(this.OnUpdateText);
this.Invoke(dele, new object[]{i});
}
else
label1.text=i.tostring();

}
------解决方案--------------------
for example:

private System.Timers.Timer myTimer;
private int count;

public delegate void MyInvoke(string str);
public Form1()
{
InitializeComponent();
count = 0;
myTimer = new System.Timers.Timer();
myTimer.Interval = 2000;
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
myTimer.Enabled = true;
}

private void UpdateUI(string str)
{
this.label1.Text = str;
}

void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//显示Lable
MyInvoke mi = new MyInvoke(this.UpdateUI);
this.BeginInvoke(mi, new object[] { count.ToString() });
count++;
}