2012-04-05 7 views
2

정말 SharpDX 질문인지 일반적인 C# 질문인지 잘 모르겠습니다.SharpDX RenderLoop 끝내기

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

그래서 내가해야 할 일을 어떻게 든 렌더링 루프를 종료 할 수 있습니다 :

SharpDX 대리자를 사용하여 실행되는 렌더링 루프를 가지고있다. 그건 그냥 전류 루프를 종료하고, 처음부터 다시 시작하기 때문에

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

나는 단지 return 수 있습니다.

답변

1

응용 프로그램 (Application.Exit)을 종료해야합니다. 다른 옵션은 루프 밖에서 루프 내부로 작업을 수행하는 것입니다.

+0

꽤 많이 있습니다. SharpDX에서 특히, 나는'm_RenderForm.Close()'를 사용하여 포함 된 폼을 닫아야했습니다. – Cylindric

0

다른 솔루션은 제어를 파괴 "하는"renderLoop가 작동, 예를 들어, RenderForm.Close()

0

당신은 그것을 처리 할 수하는 것입니다.

myDXControl.Dispose(); 

그런 다음 루프가 중지됩니다. 루프를 다시 시작하려면 배열이 myDXControl.IsDisposed에 있는지 확인하고 컨트롤을 다시 초기화하고 루프를 시작할 수 있습니다. 도움이 되었으면 좋겠다.

0

SharpDX의 소스 코드를보고 직접 해결책을 찾아 볼 수있다. 어쨌든 나는이 문제에 너무 빠졌으며 소스 코드를 보았습니다. 그것에서 , 여기 Run의 코드입니다 : 계속 상태가 년대 while에서

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(); 
} 

; 당신이 거기에 and 연산자를 추가 할 수 있습니다

초기 포스터 중 하나로서
private static bool cancelLoop = false; 

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() && !cancelLoop) 
      renderCallback(); 
    cancelLoop = false; 
} 

public static void CancelRun() 
{ 
    cancelLoop = true; 
} 
0

가 표시했습니다 코드는 루프 내에서 매우 간단하다. 호출 한 함수는 편리함을위한 것이며 실제로는 폼에서 자신 만의 역할을 할 수 있습니다. 라이브러리를 재 컴파일 할 필요가 없다. application.exit이 원하는 유일한 종료 트리거가 아니라면 폼에 함수를 추가하면된다.