public void RunWindowLoop()
{
Visible = true;
while (Visible)
{
_previousFrameStartTime = DateTime.UtcNow;
RenderFrame();
NativeWindow.ProcessEvents();
DateTime afterFrameTime = DateTime.UtcNow;
double elapsed = (afterFrameTime - _previousFrameStartTime).TotalSeconds;
double sleepTime = s_desiredFrameLength - elapsed;
if (sleepTime > 0.0)
{
DateTime finishTime = afterFrameTime + TimeSpan.FromSeconds(sleepTime);
while (DateTime.UtcNow < finishTime)
{
Thread.Sleep(0);
}
}
}
}