gpt4 book ai didi

c# - 退出 SharpDX 渲染循环

转载 作者:太空宇宙 更新时间:2023-11-03 14:03:38 24 4
gpt4 key购买 nike

SharpDX 有一个 RenderLoop,它在渲染循环中运行给定的委托(delegate):

RenderLoop.Run(m_RenderForm, () =>
{
// Do stuff here to render things...
}

我需要做的是以某种方式退出渲染循环。

RenderLoop.Run(m_RenderForm, () =>
{
if (DoINeedToQuit() == true)
{
// What do I put here?
}
}

我不能只是return,因为那只会结束当前的循环迭代。

最佳答案

由于我也遇到了这个问题,所以我查看了SharpDX的源代码并找到了解决方案。

下面是Run方法的源代码:

public static void Run(Control form, RenderCallback renderCallback, bool useApplicationDoEvents = false)
{
if (form == null)
throw new ArgumentNullException("form");
if (renderCallback == null)
throw new ArgumentNullException("renderCallback");
form.Show();
using (var renderLoop = new RenderLoop(form) { UseApplicationDoEvents = useApplicationDoEvents })
while (renderLoop.NextFrame())
renderCallback();
}

while 中有一个继续的条件;修改那个条件就足够了。您可能希望使用以下代码创建一个静态类:

private static bool mExitLoop = false;

public static void Run(Control form, RenderCallback renderCallback, bool useApplicationDoEvents = false)
{
if (form is null)
throw new ArgumentNullException(nameof(form));

if (renderCallback is null)
throw new ArgumentNullException(nameof(renderCallback));

Contract.EndContractBlock();

form.Show();

using (var renderLoop = new RenderLoop(form) { UseApplicationDoEvents = useApplicationDoEvents })
{
while (renderLoop.NextFrame() && !mExitLoop)
renderCallback();
}

mExitLoop = false;
}

public static void ExitLoop()
{
mExitLoop = true;
}

关于c# - 退出 SharpDX 渲染循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10030331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com