一个函数内部分成三个主要的模块
{
//模块1
//这里想实现的是先暂停5秒钟再接着执行下面的语句//模块2//模块3
}模块1执行完后,我想用C#去实现每隔一秒钟执行一次输出,一个执行5秒,5秒过后再执行下面的语句。我用Thread.Sleep(5000)//也就是说不用输出也可以,但需要5秒过后再执行下面的语句。然后发现整个窗口都假死了,所以想问下大家应该怎样去解决这问题呢。Timer的话好像只能每隔一定的时间去执行一个函数,却停止不下来,而多线程的话又不是很熟悉。大家有什么想法吗? 谢谢。

解决方案 »

  1.   

    多线程吧     Thread thread = new Thread((() =>
                {
                    Thread.Sleep(5000);
                    //非UI动作写在Dispatcher.Invoke外面
                    App.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        //做你想做的UI动作
                    }));
                }));            //后台线程
                thread.IsBackground = true;            thread.Start();
      

  2.   

    以上是WPF 的哈  winform的话 不需要Dispatcher   只需XX.Invoke
      

  3.   


    我是用WPF实现的,先尝试一下。
      

  4.   

    按我的理解 下面应该可以实现,不过这样子 好像有点   private void MyFunction()
            {
                DispatcherTimer timer = new DispatcherTimer();
                //1秒输出
                timer.Interval = TimeSpan.FromSeconds(1);
                timer.Tick += (t, tic) =>
                {
                    //
                    //输出代码
                      //                Thread thread = new Thread((() =>
                    {
                        //等待5秒
                        Thread.Sleep(5000);                     //Model2                     //Model3
                       
                    }));                //后台线程
                    thread.IsBackground = true;                thread.Start();
                };            timer.Start();
            }