【问题标题】:C# - How do I use microseconds?C# - 我如何使用微秒?
【发布时间】:2012-10-04 08:09:41
【问题描述】:

我正在尝试使图片框在 Winform 中平滑移动,它看起来平滑的唯一方法是如果我使用计时器并将像素速度降低到每 1 微秒 1 像素,即使这样图片框的移动很慢。

如何使用微秒使图片框移动得更快,同时在移动时仍保持平滑度?

【问题讨论】:

  • 您确定您的意思是微秒(10^-6 秒)还是毫秒(10^-3 秒)?
  • 他的意思显然是毫
  • @dreamlax 不要跑题,你知道他的意思
  • @АртёмЦарионов:因为这是一个有效的问题,如何在微秒内做某事(可能不控制计时器),我会说单位是一个基本信息,因此错误了 1000 倍很重要。

标签: c# timer


【解决方案1】:

首先我不知道你在问什么,所以也许这会有所帮助,也许不会。

时间是一个棘手的问题。首先,所有 .net 计时器都以毫秒为分辨率,低于此分辨率,如果不使用某种类型的高分辨率计时器,您无法保证系统返回给您的内容。 .net 秒表使用底层的高分辨率计时器,但没有回调机制,因此您需要使用不同的线程和轮询来构建自己的计时器。也就是说,您可能希望以不同的方式查看动画,然后移动图片框,例如使用 bit blt 或重载低级绘制。

【讨论】:

    【解决方案2】:

    我认为在表单中移动控件是一个相当缓慢的操作;所以并不是你的计时器不够精细,它无论如何都会闪烁。您可以在 Paint 事件中将图片框中的任何内容绘制到表单背景上,而不是移动图片框,而是在计时器滴答时将绘制的位置更改为。这样你就可以利用double buffering 之类的东西来获得更流畅的动画。您会发现在这种情况下,即使是 40 毫秒(25Hz 刷新)这样比较大的间隔也应该足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-06
      • 2014-04-07
      • 2022-10-19
      • 2011-06-26
      • 2016-10-23
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      相关资源
      最近更新 更多