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を上書きする2回呼び出します。複数の異なるアクション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)2つのメソッド呼び出しの間で使用するだけです。

于 2012-12-23T11:25:15.107 に答える