1

我想有一种方法可以在开始另一个调用之前等待一个方法在 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);

        });

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

4

2 回答 2

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");  
 });
于 2012-12-23T10:42:16.037 回答
0

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

于 2012-12-23T11:25:15.107 回答