我是做java的,近来需要写一个小应用,我选用的c#,顺便学习一下c#
在我完成小应用的过程中出现困扰我的问题。
问题描述如下:private static int flag=0;
private static System.Timers.Timer t;
private static Hashtable ht;public Form1()
{
   t= new System.Timers.Timer(1);
   ht = new Hashtable();
    t.Elapsed += new System.Timers.ElapsedEventHandler(show);
    t.AutoReset = true; 
    t.Enabled = true;
}//定时器 用来从HASHTABLE中取得数据动态显示到label1上
public void show(object source, System.Timers.ElapsedEventArgs e) 

            CheckForIllegalCrossThreadCalls = false;
            
            if (flag >(ht.Count-1))
            {
                flag = 0;
            }
            try
            {
                this.label1.Text = ht[flag+""].ToString();
                flag++;
            }
            catch (Exception eee)
            {
                Console.WriteLine("" +eee.ToString());
            }
}        //我点击label2后,定时器停止,label1显示滚动显示停止,同时根据当前flag取得hashtable中的值放到label2。
private void label2_Click(object sender, EventArgs e)
{
  t.Stop(); 
  this.label2.Text = ht[flag + ""].ToString();
}按理来说当我点击label2后,label2和label1 的text显示的值应该是一样的
但是测试中发现大部分时间是一样的,但还是有时候两者不一致,原因是hashtable的key值取的不一样
label1 取(flag+1)了 label2取flag 也就是label2_Click方法中虽然我停止了timer,但是Timer。ElapsedEventHandler
还会触发一次事件。各位帮我看看 这是如何解决?