关于定时的问题 一个按钮 我一分钟点一下 我现在这个程序要判断我是不是超过一分钟没点他 如果超过一分钟没点则在文本框中提示我,我接着点则不会有提示 如果我再超过一分钟没点 再提示我一次 循环这个简单的功能我发现在C#中真的不好实现,C#中的timer不支持重新计时,伤心了,求教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 额 是winform的 人生如梦兄,winform里面timer为什么不能重新计时呢?我想这样,就是timer设置一分钟提醒,如果点击按钮就让timer从0开始计时,可是 实现不了 看来你是知道怎样实现,只是不知道怎样重启定时器计时而已。下面的方法使定时器重启:timer.Enable = false;timer.Enable = true;每按一次按钮就执行一次上面的代码即可。 其实我一直用的是这个方法,但是我发现这个方法有问题,有的时候会启动不了定时器,我解释一下吧,我用的是form命名空间的timer也就是控件托进去的,我是用一个单独的线程来处理一个串口接受数据的,串口监听,收到数据进行处理,如果超过一分钟未收到数据,就要提醒我提的问题是这个问题的简化,用的方法和你相同,但是总会出现启动不了定时器,受不了 http://www.jiaonan.tv/html/blog/1/24051.htm 你试试就知道了,我一直都用它。如果确实不行,那可能是其它问题引起的。比如你不应该这样简化你的问题,因为在后台线程中使用 Forms.Timer 类时和在 UI 线程中使用是有些不同的。 我不知道你的具体的代码,所以不知道是什么问题。不过,通常在后台线程里面使用定时器时,最好使用 System.Threading.Timer 类而不是 System.Windows.Forms.Timer 类。 参考一下吧,对你的具体问题不太明白public partial class Form1 : Form { System.Timers.Timer t; public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { Thread th = new Thread(new ThreadStart(time)); th.IsBackground = true; th.Start(); } private void time() { t = new System.Timers.Timer(5000); t.Elapsed += new System.Timers.ElapsedEventHandler(CallBack); t.Start(); } void CallBack(object sender, System.Timers.ElapsedEventArgs e) { t.Enabled = false; settext("请点击button3"); } private void settext(string p) { if (textBox1.InvokeRequired) { SetTextHandle sh = new SetTextHandle(settext); textBox1.Invoke(sh, new object[] { p }); } else { if(textBox1.Text != p) textBox1.Text = p; } } private void button3_Click(object sender, EventArgs e) { textBox1.Clear(); t.Enabled = true; } 方法1:Timer.Enabled置为false接着置为true方法2:Timer的Interval设置的小一些,如1000(1s),用一个成员变量记录初始时间,如果当前时间比初始时间多于1分钟,提示;点按钮后再把初始时间设置为当前时间。说明:这是干什么用的,为什么不让它自动点,而是要人点,还要提示? c#做文本文档的问题 base对象 超级简单的Request.QueryString问题! 求教:XMLDocument中的内容怎样转换为一个字符串? 关于Socket的奇怪问题,头晕啊~~ 进度条的使用 大神出马吧,如何生成这样不规整的表格 关于数据窗体向导的问题 送100分请大家帮忙搞清楚一个有关数据绑定的问题? 求任意数值的n次及开n次方的算法 用什么控件什么方式显示一组数据比较有效率? winfrom关闭新窗口后怎么刷新旧窗口
timer.Enable = false;
timer.Enable = true;
每按一次按钮就执行一次上面的代码即可。
比如你不应该这样简化你的问题,因为在后台线程中使用 Forms.Timer 类时和在 UI 线程中使用是有些不同的。
不过,通常在后台线程里面使用定时器时,最好使用 System.Threading.Timer 类而不是 System.Windows.Forms.Timer 类。
{
System.Timers.Timer t; public Form1()
{
InitializeComponent();
} private void button2_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(time));
th.IsBackground = true;
th.Start();
} private void time()
{
t = new System.Timers.Timer(5000);
t.Elapsed += new System.Timers.ElapsedEventHandler(CallBack);
t.Start();
} void CallBack(object sender, System.Timers.ElapsedEventArgs e)
{
t.Enabled = false;
settext("请点击button3");
} private void settext(string p)
{
if (textBox1.InvokeRequired)
{
SetTextHandle sh = new SetTextHandle(settext);
textBox1.Invoke(sh, new object[] { p });
}
else
{
if(textBox1.Text != p)
textBox1.Text = p;
}
} private void button3_Click(object sender, EventArgs e)
{
textBox1.Clear();
t.Enabled = true;
}
方法2:Timer的Interval设置的小一些,如1000(1s),用一个成员变量记录初始时间,如果当前时间比初始时间多于1分钟,提示;点按钮后再把初始时间设置为当前时间。说明:这是干什么用的,为什么不让它自动点,而是要人点,还要提示?