public void Loop() { while (IsActive) { lock (QueueLock) { if (TaskQueue.Count != 0) { Wait.Set(); } } Wait.WaitOne(); Tuple <string, Dictionary <string, string> > Temp; lock (QueueLock) { Temp = TaskQueue.Dequeue(); } //tasks switch (Temp.Item1) { case "RecvParse": RecvParser(Temp.Item2); break; case "global": GlobalChatNewMsg(Temp.Item2); break; case "SendToServer": BuildRequest(Temp.Item2); break; case "SystemError": ErrorToGUI(Temp.Item2); break; case "exit": IsActive = false; BuildRequest(Temp.Item2); Sender.RecvThr.Join(); return; case "auth": if (Temp.Item2["AUTH"] == "true") { LoginGUI.Invoke(LoginGUI.SuccesfulLoginDelegate); } break; case "online": ParseOnlineUsers(Temp.Item2); break; } Wait.Reset(); } }