当前位置:编程学习 > C#/ASP.NET >>

请教C#隔一段时间运行某段程序

public partial class Form1 : Form
    {
        private static System.Timers.Timer t;
private void a(object source, ElapsedEventArgs e){}
private void btnSubmit_Click(object sender, EventArgs e)
        {
            int MaxLoop = Convert.ToInt32(txtMaxLoop.Text.Trim());
            int LoopSecond = Convert.ToInt32(txtLoopSecond.Text.Trim());
            t = new System.Timers.Timer(1000);
            //实例化Timer类,设置间隔时间为1000毫秒;   
            t.Elapsed += new System.Timers.ElapsedEventHandler(a);
            //到达时间的时候执行事件;  
            t.AutoReset = true;
            //设置是执行一次(false)还是一直执行(true);   
            t.Enabled = true;
            //是否执行System.Timers.Timer.Elapsed事件;

/*
            for (int i = 1; i <= MaxLoop; i++)
            {
                DateTime StartTime = DateTime.Now;
                DateTime CheckTime = StartTime.AddSeconds(LoopSecond);
                txtCurrLoop.Text = i.ToString();
                a();
                while (DateTime.Now.CompareTo(CheckTime) < 0)
                {
                }
            }
*/
        }
private void btnSubmitStop_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }
}
我想实现的功能是:
1)点击btnSubmit按钮, RechargeSubmit函数隔几秒执行一次, 
2)执行期间可以按btnSubmitStop按钮立刻终止进程, 且winform不会像死机了一样没响应. 
(用注释内的代码或者thread.sleep(1000)会像死机一样没反应, 如果按现行代码, 会每次要按一下btnSubmit按钮才能启动下一次循环)
请问如何改进这个代码实现上述功能? 谢谢! --------------------编程问答-------------------- 要加个逻辑变量如bstop
在btnSubmit_Click事件中bstop=false
如果点了btnSubmitStop_Click就bstop=true,这样马上退出.
 while ((DateTime.Now.CompareTo(CheckTime) < 0) && bstop == false)
  {
  }
--------------------编程问答-------------------- 可以利用线程 --------------------编程问答-------------------- this.Dispose();是释放本类中的所有资源 --------------------编程问答-------------------- 线程或者timer都可以, --------------------编程问答-------------------- 每次开启一个新线程,并且可以对线程进行管理 --------------------编程问答-------------------- 一个朋友告诉我用winform.timers解决问题了. --------------------编程问答-------------------- --------------------编程问答-------------------- 写到一个单线程里吧,还有一点要注意的是,你用的那个定时器响应的事件调用的那个函数是在线程队列(THREADPOOl)里调用的,所以一下子就写了两个线程! --------------------编程问答-------------------- timer空间   解决一切时间问题 --------------------编程问答-------------------- 用timer和线程就可以了
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,