private void button1_Click(object sender, EventArgs e)
        {
            timer1.Interval = 1000;  //启动
            timer1.Enabled = true;
            timer1.Start();     //启动计时     
        }        private void timer1_Tick(object sender, EventArgs e)
        {            timer1.Stop();
            Int32 Count = 0;
            for (int i = 1; i <= 10000; i++)
            {
                Count = Count + i;
            }            this.label3.Text = Count.ToString();
            
            Application.DoEvents();
            this.label3.Text = "线程暂停!";            timer1.Interval = 10000;  //启动
            timer1.Enabled = true;
            timer1.Start();     //启动计时     
        }

解决方案 »

  1.   

    //timer1.Enabled = true;
    timer1.Start(); //启动计时
    使用一个就好 
      

  2.   

    timer1_Tick事件就是指timer每次执行时候的事件
    她的执行是根据timer的Interval 来的,每隔Interval毫秒 时间调用一次
    所以你不能在timer1_Tick中再增加
    timer1.Stop();timer1.Interval = 10000; //启动
      timer1.Enabled = true;
      timer1.Start(); //启动计时  
      

  3.   

    恭喜你,你看到了dotnet内存管理的本质,就是不停的申请使用内存,一直到你机器快没有内存了,才开始GC一下(垃圾回收)。
      

  4.   

    其实程序中只定义了一个变量 Int32 Count = 0;
    .net 不是说他能托管吗?
    如果这个问题不解决的话 程序稍微一大 系统就会撑死,并报当前应用程序outofmemory像飞龙所说 就是不停的申请使用内存,一直到你机器快没有内存了,才开始GC一下(垃圾回收)。
    我做的应用程序里并没有回收,而是应用程序超出内存
    怎么才能解决此为题呀?
      

  5.   

    timer1.Stop();
    timer1.Start(); //启动计时   
    上面两行没有必要写的,因为Timer是不可重入的。内存一直再涨或许就是GC机制的问题。。从代码上看不出在消耗多大的内存
      

  6.   

    time_click事件中写
    timer1.Interval = 10000; //启动
      timer1.Enabled = true;
      timer1.Start(); //启动计时  
    纯属多余,
    个人意见……
      

  7.   

    timer1_Tick(object sender, EventArgs e)中, 把timer1.Stop(); timer1.Interval = 10000; //启动
      timer1.Enabled = true;
      timer1.Start(); //启动计时   这四句话去掉 就可以了
      

  8.   


    你或者删除 Application.DoEvents() 这句,或者要保证这个时候不会有其它的执行timer1_Tick的任务堆在windows消息泵里。不要滥用Application.DoEvents()。这并不是什么线程,而是使用函数递归的方式,去调用在windows系统消息泵里的其它任务(那些原本排在后边的任务)。假设它所调用了后边的timer1_Tick,那么里边的方法就又递归地调用更多的后边的消息。如果你会用线程等等,就不要使用Application.DoEvents()。这是一种应该淘汰的、在vb3~vb6那种根本没有多线程机制的程序中才用的方法。另外,timer1_Tick的第一句话应该是停止定时器,然后才去正常处理事务。等处理完事务,再启动定时器。假设你不停止定时器,那么就要保证定时器任务不会“重复进入”,比如写一个变量标记是否正在处理这到时事务,判断当这个标记为true那么应该立刻return,而不是重复执行。
      

  9.   

    顺便说一下,虽然不同程序各有不同,但是.net调用GC仍然是很频繁的。以秒来计算,肯定不会超过两位数。
      

  10.   

    你的程序感觉像是递归调用,导致堆栈在不停地增大,我把timer1.Interval = 10000(10秒)改成1秒后发现,内存差不多是每秒分配了8192字节,在我看来应该是在Tick方法递归地调用了自己