我有一个奇怪的问题...... 在过去的几个小时里,我一直在想不起...... 我输入winform代码的计时器(来自工具栏)不会勾选...
我的程序中有几种形式的计时器,它们都工作正常......我试着完全一样,它不会打勾...... 我选择它,将它拖到一个表单上,启用它,设置间隔并处理tick事件......没有任何反应...... 我甚至尝试在tick事件中添加像mailboxbox.show这样的随机代码,只是为了看看是否有任何事情发生,什么都没有! 正如我所说,我的程序中有一些计时器(在其他表格上,而不是我试图放置这个计时器的那个)并且它们都工作正常......
有什么建议吗?
提前感谢!
答案 0 :(得分:10)
我发现如果我从非UI线程中停止计时器,然后再次启动它,我就会丢失事件钩子。
我不知道“正确”答案是什么,但这对我来说效果很好:
public class BetterTimer : System.Windows.Forms.Timer
{
public BetterTimer():base()
{ base.Enabled = true; }
public BetterTimer(System.ComponentModel.IContainer container) : base(container)
{ base.Enabled = true; }
private bool _Enabled;
public override bool Enabled
{
get { return _Enabled; }
set { _Enabled = value; }
}
protected override void OnTick(System.EventArgs e)
{ if (this.Enabled) base.OnTick(e); }
}
这种方法有三点:
1)通过覆盖构造函数,我确保从头开始启用基本计时器。
2)通过覆盖“启用”,我从不让基本计时器被禁用,但界面不会改变。
3)通过覆盖“OnTick”,我让被覆盖的Enabled属性决定是否应该触发事件。
Start()和Stop()分别通过将true和false设置为Enabled属性来工作。
顺便说一句 - 有没有人知道为什么当从非UI线程停止/禁用定时器时,事件永远不会触发(或断开连接?)?
答案 1 :(得分:7)
不要System.Windows.Forms.Timer计时器启动.enabled ...无论如何..我刚刚开始工作......我将视觉工作室生成的代码形式WINFORMNAME.designer.cs复制到WINFORMNAME的.cs ... 我不知道如何以及为什么但它有效...
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Enabled = true;
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
void timer_Tick(object sender, EventArgs e)
{
//do something
}
感谢大家的答案!
答案 2 :(得分:6)
请务必致电timer1.Start()
启动它答案 3 :(得分:2)
要回答上一个问题,不允许操纵在另一个线程上创建的控件。您可以通过代表调用。
答案 4 :(得分:1)
我之前遇到过这种情况。我在设置间隔之前启用了计时器。交换两条线使其工作。
答案 5 :(得分:0)
我和Andrej有同样的问题,我尝试过在网上找到的几种解决方案。
我的程序中每个表单都有时间限制(倒计时),以下是我如何解决它:
我使用过计算机工程解决方案。把它关掉再打开!! :))我的意思是我不知道为什么,但它的工作原理!!
首先,我从.cs和设计中删除了所有计时器 然后我在每个表单中添加了一个计时器,并为计时器和文本框添加了不同的名称,并逐个编写相同的代码。
我刚使用了timer.start()和Timer.stop()
private void Form7_Load_1(object sender, EventArgs e)
{
timer7.Start();
}
int duration = 30;
private void timer7_Tick(object sender, EventArgs e)
{
duration--;
textBox7.Text = duration.ToString(); // to show the countdown
if (duration == 0)
{
timer7.Stop();
MessageBox.Show("You ran out of time. Please go to the next page");
this.Hide();
Form8 f8 = new Form8();
f8.ShowDialog();
}
}
希望有所帮助