等待一段固定的时间再开始另一种方法

时间:2012-12-23 10:30:17

标签: c# wpf threadpool dispatcher

我希望有一种方法可以在开始另一个调用之前等待一个方法在5秒内完成。它就像它首先显示“Hello”然后等待5秒,然后显示“World”并等待另外5秒再次显示两个消息。我创建了一个DispatcherTimer方法,但它在等待5秒内以快速方式显示两个文本。

    private void AutoAnimationTrigger(Action action, TimeSpan delay)
    {
        timer2 = new DispatcherTimer();
        timer2.Interval = delay;
        timer2.Tag = action;
        timer2.Tick += timer2_Tick;

        timer2.Start();
    }

    private void timer2_Tick(object sender, EventArgs e)
    {
        timer2 = (DispatcherTimer)sender;
        Action action = (Action)timer2.Tag;

        action.Invoke();

        timer2.Stop();
    }


 if (counter == 0)
                {
                    AutoAnimationTrigger(new Action(delegate { MessageBox.Show("Hello"); }), TimeSpan.FromMilliseconds(5000));
                    AutoAnimationTrigger(new Action(delegate { MessageBox.Show("World"); }), TimeSpan.FromMilliseconds(5000));

                }

我错过了什么或做错了什么?

修改___

 ThreadPool.QueueUserWorkItem(delegate
        {
            //Thread.Sleep(5000);

            Dispatcher.Invoke(new Action(() =>
            {
                TranslateX(4);
                TranslateY(-0.5);

            }), DispatcherPriority.Normal);


            //Dispatcher.BeginInvoke(new Action(() =>
            //{
            //    TranslateY(0.5);
            //}), DispatcherPriority.Normal);

        });

然后我只是简单地调用方法..

2 个答案:

答案 0 :(得分:3)

您调用AutoAnimationTrigger两次会覆盖您声明为类变量的timer2。 多个不同操作的更简单解决方案是使用Thread.Sleep

 ThreadPool.QueueUserWorkItem(delegate
 {
    Thread.Sleep(5000);
    MessageBox.Show("Hello");
    Thread.Sleep(5000);
    MessageBox.Show("World");
    Thread.Sleep(5000);      
    MessageBox.Show("Hello World");  
 });

答案 1 :(得分:0)

在两个方法调用之间使用Thread.Sleep(5000)