创建Windows应用程序后
用窗体的Load方法创建一个线程调用UpDown方法
但是方法只调用一次...。
我想是100毫秒调用一次的。private void frmTest_Load(object sender, EventArgs e)
        {
            Thread moveUpDown = new Thread(new ThreadStart(UpDown));
            moveUpDown.Start();
                     
        }        private bool upDown = true;
        private void UpDown()
        {
            if (this.Top < lalShow.Top + lalShow.Height)
            {
                upDown = false;
            }
            if (lalShow.Top < 0)
            {
                upDown = true;
            }
            if (upDown)
            {
                lalShow.Top += 10;
                Thread.Sleep(100);   
            }
            else
            {
                lalShow.Top -= 10;
                Thread.Sleep(100);
            }
        }

解决方案 »

  1.   

    拖一个timer控件到from上,双击,在相应的代码里写你的UpDown()
      

  2.   

    timer.Interval=100;
            private void timer1_Tick(object sender, EventArgs e)
            {
                  UpDown();
            }
      

  3.   

    用一个timer控件,timer.Interval=100;
    在timer_Tick事件里加入
    Thread moveUpDown = new Thread(new ThreadStart(UpDown));
    moveUpDown.Start();
    在frmTest_Load里加入timer.Enable = true;
      

  4.   

    使用sytem.threading.timer类也可以:
    在load里添加代码如下:
    Timer ok=new Timer(UpDown,null,0,100);//其他的都不用要了。
    这个是使用线程池中的线程来执行的!
    使你的程序更简单易懂和高效。
      

  5.   

    补充以下,上面的事例有问题:
    1、必须检测成员函数updown的共享冲突。
    2、Timer ok必须是成员变量,否则,局部变量在load函数执行完毕后会自动释放,无法完成任务。
      

  6.   

    while(!IsDispost){
                if (this.Top < lalShow.Top + lalShow.Height)
                {
                    upDown = false;
                }
                if (lalShow.Top < 0)
                {
                    upDown = true;
                }
                if (upDown)
                {
                    lalShow.Top += 10;
                    Thread.Sleep(100);   
                }
                else
                {
                    lalShow.Top -= 10;
                    Thread.Sleep(100);
                }
        Thread.Sleep(100);
    }
      

  7.   

    while(!IsDisposed){ 
                if (this.Top  < lalShow.Top + lalShow.Height) 
                { 
                    upDown = false; 
                } 
                if (lalShow.Top  < 0) 
                { 
                    upDown = true; 
                } 
                if (upDown) 
                { 
                    lalShow.Top += 10; 
                    Thread.Sleep(100);    
                } 
                else 
                { 
                    lalShow.Top -= 10; 
                    Thread.Sleep(100); 
                } 
        Thread.Sleep(100); 
    }
      

  8.   

    很Cool的实现,Timer做定时任务最合适不过了当Timer对象被执行垃圾回收时,CLR就会取消定时器,以便定时器不再继续触发。因此,在使用Timer对象时,一定要有一个变量来引用Timer对象,从而保持Timer对象的继续存活,否则回调方法就不会再被调用。5楼说“Timer ok必须是成员变量”,其实静态变量又何尝不可呢?
      

  9.   

    你updown方法里面加一个while循环就可以了