public void RebuildLiquidsThread() { EventWaitHandle[] waitHandles = { NeedsLiquidEvent, Program.ShutdownEvent }; #if CREATE_CRASH_LOGS try #endif { bool shouldExit = false; while (!shouldExit && !DwarfGame.ExitGame && !ExitThreads) { EventWaitHandle wh = Datastructures.WaitFor(waitHandles); if (wh == Program.ShutdownEvent) { break; } while (!PauseThreads && RebuildLiquidsList.Count > 0) { VoxelChunk chunk = null; //LiquidLock.WaitOne(); if (!RebuildLiquidsList.TryDequeue(out chunk)) { //LiquidLock.ReleaseMutex(); break; } //LiquidLock.ReleaseMutex(); if (chunk == null) { continue; } try { chunk.RebuildLiquids(Graphics); chunk.RebuildLiquidPending = false; chunk.ShouldRebuildWater = false; } catch (Exception e) { Console.Error.WriteLine(e.Message); shouldExit = true; break; } } } } #if CREATE_CRASH_LOGS catch (Exception exception) { ProgramData.WriteExceptionLog(exception); } #endif }