C# 需要停止计时器,因为它正在循环并一次又一次地打开同一个窗口
我有一个启动时的屏幕,基本上像一个水花,但它不是。我在上面放了一个计时器。几秒钟后,窗口必须消失,然后必须显示登录。我已经展示了新的表单,但它正在循环中。它一次又一次地打开新表单!这是我的密码。我哪里做错了 计时器C# 需要停止计时器,因为它正在循环并一次又一次地打开同一个窗口,c#,C#,我有一个启动时的屏幕,基本上像一个水花,但它不是。我在上面放了一个计时器。几秒钟后,窗口必须消失,然后必须显示登录。我已经展示了新的表单,但它正在循环中。它一次又一次地打开新表单!这是我的密码。我哪里做错了 计时器 int count; count = 0; public Windowsplash() { System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.Dis
int count;
count = 0;
public Windowsplash()
{
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Interval = new TimeSpan(0,0,0,0,2500);
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
System.Windows.Threading.DispatcherTimer dispatcherTimer = sender as System.Windows.Threading.DispatcherTimer;
dispatcherTimer.Stop();
MainWindow _new = new MainWindow();
_new.Show();
this.Close();
}
我想停止计时器,这样新窗口就可以停止打开整个时间!
谢谢
PS:我将其编辑为我现在拥有的内容您正在_tickhandler中创建一个新的Dispatcher实例。然后你停止那个例子。旧的原始实例将继续运行 从处理程序中删除此行
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
不要每次在循环中都创建一个新的
分派器
,而是重新使用原始的分派器
。您的问题是,旧计时器在没有任何进一步交互的情况下继续运行。要改进IvoTops应答,您可能正在创建构造函数本地的计时器,因此无法在tick处理程序中访问它。将勾号事件处理程序的第一行更改为:
System.Windows.Threading.DispatcherTimer dispatcherTimer
= sender as System.Windows.Threading.DispatcherTimer;
通过这种方式,您可以获得触发的原始计时器,而不是创建新的计时器。更具体地说,因为他只在计数小于5时增加计数,这意味着一旦计数达到5,它将保留在那里并继续打开新窗口。@IvoTops如果我从处理程序中删除该行,处理程序的名称没有提取dispatchtimer的名称。@user1539943使用
发送者参数,如我的回答中所示。@Miika,在计数达到5个计数后,您如何将计数设置为零?为什么使用计数器而不是间隔2500?Kendall我如何使用Inrval?它有什么用呢。是的,我对计时器及其工作方式不太熟悉。只需在TimeSpan中指定一个2500而不是500的间隔,然后完全删除count变量。@KendallFrey因为Dispatchermer.interval=2500不工作,我能得到一些编码吗?只需将500替换为2500,并保留TimeSpan。
int count;
count = 0;
public Windowsplash
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Interval = new TimeSpan(0,0,0,500);
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Start();
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
System.Windows.Threading.DispatcherTimer dispatcherTimer = sender as System.Windows.Threading.DispatcherTimer;
dispatcherTimer.Stop();
MainWindow _new = new MainWindow();
_new.Show();
this.Close();
}