none
使用时钟为何会使窗体进入死锁状态? RRS feed

  • 问题

  • 代码如下:
        public partial class Show : Form
    
        {
    
            private int i = 0;
    
            private System.Timers.Timer timer1;
    
            public Show(string mc)
    
            {
    
                InitializeComponent();
    
                this.Location = new Point(Screen.GetWorkingArea(this).Size.Width - this.Width, Screen.GetWorkingArea(this).Size.Height);
    
                label1.Text = mc;
    
                timer1 = new System.Timers.Timer(50);
    
                timer1.Enabled = true;
    
                timer1.AutoReset = true;
    
                timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
    
            }
    
    
    
            private void timer1_Tick(object sender, EventArgs e)
    
            {
    
                if (i < this.Height)
    
                {
    
                    this.Location = new Point(Screen.GetWorkingArea(this).Size.Width - this.Width, Screen.GetWorkingArea(this).Size.Height - i);
    
                    i += 10;
    
                }
    
                else
    
                {
    
                    timer1.Stop();
    
                }
    
            }
    
        }<br/><br/><br/>
    
    

    代码2:
        static class Program
    
        {
    
            /// <summary>
    
            /// 应用程序的主入口点。
    
            /// </summary>
    
            static List<Dt> dt;
    
            static Show sh;
    
            static  System.Timers.Timer timer;
    
            [STAThread]
    
            static void Main()
    
            {
    
                timer = new System.Timers.Timer(1000);
    
                timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
    
                timer.AutoReset = true;
    
                timer.Enabled = true;
    
    
    
                dt = Dt.GetAll();
    
                Application.EnableVisualStyles();
    
                Application.SetCompatibleTextRenderingDefault(false);
    
                Application.Run();
    
     
    
            }
    
    
    
            static void timer_Elapsed(object sender, ElapsedEventArgs e)
    
            {
    
                foreach (Dt d in dt)
    
                {
    
                    if (d.Dat >= DateTime.Now)
    
                    {
    
                        if (d.TZ == false)
    
                        {
    
                            sh = new Show(d.Mc);
    
                            sh.Show();
    
                            d.TZ = true;
    
                        }
    
                    }
    
                }
    
            }
    
    
    
            static void sh_FormClosing(object sender, FormClosingEventArgs e)
    
            {
    
                timer.Start();
    
            }
    
        }
    
    
    我是想实现SHOW窗体动态滚出,可是不知道为什么SHOW窗体滚出完毕后整个应用程序就进入死锁状态。
    2010年2月10日 8:50

答案

  • 你好!
         需要在使用完毕Timer的时候关闭停止这个Timer:
         timer1.Stop();
         希望对你有帮助!
    周雪峰
    2010年2月11日 10:45
    版主