如下代码,执行时会出现程序假死
            for (int j = 0; j < 36; j++)
            {
                pictureBoxZhang.Top ++;                System.Threading.Thread.Sleep(10);
            }            for (int j = 0; j < 15; j++)
            {
                for (int i = 0; i < 10; i++)
                {
                    pictureBoxZhang.Top++;
                    pictureBoxZhang.Left++;
                    System.Threading.Thread.Sleep(10);
                }
                for (int i = 0; i < 10; i++)
                {
                    pictureBoxZhang.Top--;
                    pictureBoxZhang.Left++;
                    System.Threading.Thread.Sleep(10);
                }
            }            for (int j = 0; j < 15; j++)
            {
                for (int i = 0; i < 10; i++)
                {
                    pictureBoxZhang.Top++;
                    pictureBoxZhang.Left--;
                    System.Threading.Thread.Sleep(10);
                }
                for (int i = 0; i < 10; i++)
                {
                    pictureBoxZhang.Top--;
                    pictureBoxZhang.Left--;
                    System.Threading.Thread.Sleep(10);
                }
            }            for (int j = 0; j < 36; j++)
            {
                pictureBoxZhang.Top --;                System.Threading.Thread.Sleep(10);
            }

解决方案 »

  1.   

    你这么多的循环嵌套,而且在里面使用了System.Threading.Thread.Sleep(10);
    那不是假死,那失去响应是正常的,因为主线程不停地进入睡眠状态
      

  2.   

    System.Threading.Thread.Sleep(10)时间很短,不明显
      

  3.   

    lz!
      你这程序是不是写着玩儿的??
        一般的循环都有替代的,
      尽量别嵌套太多循环!
     还有同上,循环一次就Sleep干啥??
      不懂!
      

  4.   

    我的确是写着玩的,而且还想上面的功能一个不能少,因为Thread.Sleep(10)是为了实现图片移动变化的缓冲效果。
    我如何优化我的程序呢?
      

  5.   

    你这个程序不会出现你想要得那种结果,只会在停了十多秒后给你最后的显示结果因为中间你只是不断将这个属性加加减减。要做的话,我一时没细想,不过用定时器应该是可以的。timer定时执行。ps,timer的间隔为50毫秒就很足够了,很多gif一秒只有几fps都很平滑了。