1

我有这个正在启动的屏幕,基本上就像一个飞溅,但它不是。我在上面放了一个计时器。几秒钟后,窗口必须消失,然后必须显示登录。我已经展示了新表格,但它是在循环中。它一次又一次地打开新表格!这是我的代码。我在哪里做错了?

定时器

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:我把它编辑成我现在拥有的

4

4 回答 4

2

您正在 _Tick 处理程序中创建一个新的 DispatcherTimer 实例。然后你停止那个实例。旧的原始实例将继续运行。

从处理程序中删除此行;

System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
于 2012-08-16T12:23:46.377 回答
1

为了改进 IvoTops 的答案,看起来您可能正在为构造函数创建本地计时器,因此在滴答处理程序中将无法访问它。将您的刻度事件处理程序的第一行更改为:

System.Windows.Threading.DispatcherTimer dispatcherTimer
    = sender as System.Windows.Threading.DispatcherTimer;

通过这种方式,您可以获得被触发的原始​​计时器,而不是创建一个新计时器。

于 2012-08-16T12:27:44.247 回答
0
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(); 
} 
于 2012-08-22T06:38:38.943 回答
0

与其DispatcherTimer在循环中每次都创建一个新的,不如重用sender原来的DispatcherTimer. 您的问题是旧计时器继续运行而没有任何进一步的交互。

于 2012-08-16T12:24:44.437 回答