一个很简单的问题,100分相送,马上揭贴
我做了一个进度条,希望在到100%的时候提示时间到,但是进入了死循环,请解答
//进度条
private void button4_Click(object sender, System.EventArgs e)
{
System.Timers.Timer aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed+=new System.Timers.ElapsedEventHandler(aTimer_Elapsed);
// Only raise the event the first time Interval elapses.
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private void aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if(Bar1.Value<100)
{
Bar1.Value++;
label1.Text=Bar1.Value.ToString()+"%";
}
else
{
MessageBox.Show("时间到");
return;
}
}
问题点数:100、回复次数:13Top
1 楼ld_thinking(懒得想)回复于 2005-11-18 11:50:59 得分 0
aTimer.AutoReset = true;
????Top
2 楼jinjazz(近身剪)回复于 2005-11-18 11:55:02 得分 2
AutoReset ?Top
3 楼petereggplant()回复于 2005-11-18 11:59:50 得分 2
AutoReset设为False应该就可以了,true的话它每过一个interval都会触发事件的.false以后只会触发一次.Top
4 楼petereggplant()回复于 2005-11-18 12:02:29 得分 2
哦,不对,不是AutoReset的问题,我觉得可能是因为你没有timer的Close函数,所以他一直在check进度条的进度,到了满的时候就一直check,所以就死循环了,在完成messagebox以后调用Close函数就可以了Top
5 楼s5689412(华君)回复于 2005-11-18 12:03:45 得分 10
AutoReset为true是对的,没有问题。
Timer.AutoReset 属性 [C#]请参见
Timer 类 | Timer 成员 | System.Timers 命名空间 | Interval | Enabled | Start | Elapsed | Timer 成员(Visual J# 语法) | C++ 托管扩展编程
要求
平台: Windows 98, Windows NT 4.0, Windows ME, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 系列
语言
C#
C++
JScript
Visual Basic
全部显示
获取或设置一个值,该值指示 Timer 是应在每次指定的间隔结束时引发 Elapsed 事件,还是仅在指定的间隔第一次结束后引发该事件。
[Visual Basic]
Public Property AutoReset As Boolean
[C#]
public bool AutoReset {get; set;}
[C++]
public: __property bool get_AutoReset();
public: __property void set_AutoReset(bool);
[JScript]
public function get AutoReset() : Boolean;
public function set AutoReset(Boolean);
属性值
如果 Timer 应在每次间隔结束时引发 Elapsed 事件,则为 true;如果它仅在间隔第一次结束后引发一次 Elapsed 事件,则为 false。默认为 true。
备注
如果调用 Start 方法时已经启用 Timer,则重置间隔。如果 AutoReset 为 false,则必须调用 Start 方法才能再次开始计数。
重置间隔会影响引发 Elapsed 事件的时间。例如,如果将间隔设置为 5 秒,然后将 Enabled 属性设置为 true,则计数将在设置 Enabled 时开始。如果在计数为 3 秒时将间隔重置为 10 秒,则 Elapsed 事件在 Enabled 属性设置为 true 的 13 秒之后第一次引发。
我觉得问题在判断到Bar1.Value>=100之后应该关闭Timer,否则Timer会一直持续下去。
应该修改这里:
else
{
aTimer.Enabled = false;
MessageBox.Show("时间到");
return;
}Top
6 楼noodle2005(wangf)回复于 2005-11-18 12:04:26 得分 2
楼上正解Top
7 楼happycharles()回复于 2005-11-18 12:38:30 得分 2
嗯,关闭TimerTop
8 楼hexinyu2005(还需努力)回复于 2005-11-18 13:37:37 得分 80
private void aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if(Bar1.Value<100)
{
Bar1.Value++;
label1.Text=Bar1.Value.ToString()+"%";
}
else
{
aTimer.Enabled=false;
MessageBox.Show("时间到");
return;
}
}Top
9 楼s5689412(华君)回复于 2005-11-18 14:18:46 得分 0
testTop
10 楼s5689412(华君)回复于 2005-11-18 14:25:11 得分 0
现在结贴了之后还可以发贴啊,顺便来发个牢骚,明明我先回答的,结果看来还是不敌尽是代码的回答啊,白打那么多字了,气愤中......Top
11 楼jinjazz(近身剪)回复于 2005-11-18 14:26:44 得分 0
to楼上,习惯就好了^&^Top
12 楼ld_thinking(懒得想)回复于 2005-11-18 14:30:11 得分 0
哈哈 沙发不值钱了...-_-Top
13 楼happycharles()回复于 2005-11-19 20:02:35 得分 0
你写太多了,搂主可能没看到。。Top




