Helix Viewport在断点处暂停时继续缩放

时间:2019-01-30 16:48:29

标签: c# visual-studio asynchronous mousewheel helix-3d-toolkit

我正在运行Helix视口,并正在用Previewmousewheel捕获鼠标移动事件以运行方法。当调试一些更改时,我发现对方法的更改是,当我设置一个断点时(在捕获mousewheeledevent和随后在视口中应用缩放之间的任何位置),从mousewheel的一个de子获得的缩放量将连续增加与程序已暂停的时间成比例(基本上是从mousewheeled事件和将增量应用于视口以来所经过的时间)。这使得调试我的更改似乎无法实现,尽管我当然可以解决此问题。

真正的问题是,现在我意识到以这种方式缩放是完全不稳定的,因为在事件和视口设置之间,某些操作要比其他操作花费更长的时间,具体取决于我在做什么。

当我尝试对摄像机进行更改并根据我程序的特定细节完全控制摄像机行为时,这似乎是一件完全随意的事情。

有什么方法可以阻止这种情况的发生或几乎完全缓解吗?

以下代码是我程序的摘录,似乎是问题的主要驱动因素,但我不确定我是否可以删除这种在程序中保留时间的方法,因为我们肯定需要一个异步计时器据我所知。

    private async Task DoWorkAsyncInfiniteLoop()
    {
        while (true)
        {
            if (Run)
            {
                Time.timeElapsed += Time.runSpeed;
                Time.simTime += Time.runSpeed;
                updateAll();
            }
            // don't run again for at least 200 milliseconds
            await Task.Delay(Time.interval);
        }
    }

也许我可以添加一些行,这些行基本上可以使我将缩放应用于视口,而无需等待await Task.Delay(Time.interval)行运行?

我必须承认我不太清楚该代码的工作方式,但是我确实知道它在await Task.Delay行中停止,直到最后我再按一次“进入”(F11),它以某种方式应用不需要的巨大缩放,而在运行之后我看不到任何代码。

有什么解决方法吗?

1 个答案:

答案 0 :(得分:1)

尝试在视口上设置IsInertiaEnabled = false