之前在画布上实现一个物体移动用了thread.sleep(),发现有时候速度会变化,就是一卡一卡的感觉,后来用了timer控件就没有这样的问题,这两者之间区别在哪里?timerc#

解决方案 »

  1.   

    timer中封装了线程,并引入了计时的概念,应该说它是线程的一个拓展应用
      

  2.   

    原来如此,那为什么用thread.sleep()会出现顿卡的现象?还是说timer控件封装的方法中用了新的技术?
      

  3.   

    按理说线程也不会卡啊
    你在线程Sleep前加Application.DoEvents()试试;
    即:...
    Application.DoEvents();
    thread.Sleep();
    ...
      

  4.   

    你确定是在线程中Sleep的?
    如果没开线程,使用Threed.Sleep()。Sleep的是主线程,UI是不会响应的,自然会卡
      

  5.   

    如果Sleep的不是UI线程,应该差不多
      

  6.   

    那应该怎么区分sleep的是否是主线程?
      

  7.   

    具体什么在那个线程中执行,要问你自己了。你在主线程调用Sleep,就是Sleep主线程;在子线程中(MSDN上看看Threeding,有个包装好的控件BackgroundWork)执行,就Sleep子线程。估计你多多线程没啥概念,跟你说,也不能理解。先多看看书吧,下个实例,多研究下。多线程应该算.net开发的一个难点吧。
      

  8.   

    winform那Timer也不是封装线程的,它封装的是Windows消息WM_TIMER
      

  9.   

    你要确定你Thread.Sleep()是在哪个线程中使用的?如果是在主线程,当然会卡顿!~
      

  10.   

    首先要理解线程,  主线程 就是你的主程序.就是你当前运行这个进程. 你在任务管理器结束了,则它必然会销毁.
    如何区分是否主线程,可以根据线程名称来看. 简单的说就是,主线程只能做一件事,做多了就受不了,就会卡.
    就像你前面的thread.sleep 它这里只是起到一个休眠的功能,你得把它放到线程里去 这样 就不会卡了
      

  11.   

    thread.sleep(n)在windows里面,代表的是在接下来的n毫秒内不参与cpu的资源的竞争,这种情况下,就算n毫秒结束了,由于有其他进程占用着cpu的资源,该进程也不会得到cpu的资源。简单的说就是,sleep函数保证进程在n毫秒内一定不会得到cpu的资源,进程的挂起时间是不确定的