Radegast.Rendering.SceneWindow.DisposeInternal C# (CSharp) Method

DisposeInternal() private method

private DisposeInternal ( ) : void
return void
        void DisposeInternal()
        {
            RenderingEnabled = false;
            Application.Idle -= new EventHandler(Application_Idle);
            Instance.State.CameraTracksOwnAvatar = true;
            Instance.State.SetDefaultCamera();

            if (!PendingTextures.Closed)
            {
                TextureThreadContextReady.Reset();
                TextureThreadRunning = false;
                PendingTextures.Close();
                TextureThreadContextReady.WaitOne(5000, false);
            }

            if (chatOverlay != null)
            {
                chatOverlay.Dispose();
                chatOverlay = null;
            }

            if (textRendering != null)
            {
                textRendering.Dispose();
                textRendering = null;
            }

            Client.Objects.TerseObjectUpdate -= new EventHandler<TerseObjectUpdateEventArgs>(Objects_TerseObjectUpdate);
            Client.Objects.ObjectUpdate -= new EventHandler<PrimEventArgs>(Objects_ObjectUpdate);
            Client.Objects.AvatarUpdate -= new EventHandler<AvatarUpdateEventArgs>(Objects_AvatarUpdate);
            Client.Network.UnregisterCallback(PacketType.KillObject, KillObjectHandler);
            Client.Network.SimChanged -= new EventHandler<SimChangedEventArgs>(Network_SimChanged);
            Client.Terrain.LandPatchReceived -= new EventHandler<LandPatchReceivedEventArgs>(Terrain_LandPatchReceived);
            Client.Avatars.AvatarAnimation -= new EventHandler<AvatarAnimationEventArgs>(AvatarAnimationChanged);
            Client.Avatars.AvatarAppearance -= new EventHandler<AvatarAppearanceEventArgs>(Avatars_AvatarAppearance);
            Client.Appearance.AppearanceSet -= new EventHandler<AppearanceSetEventArgs>(Appearance_AppearanceSet);

            if (!PendingTasks.Closed)
            {
                PendingTasks.Close();
            }

            if (genericTaskThread != null)
            {
                genericTaskThread.Join(2000);
                genericTaskThread = null;
            }

            if (instance.Netcom != null)
            {
                Instance.Netcom.ClientDisconnected -= new EventHandler<DisconnectedEventArgs>(Netcom_ClientDisconnected);
            }

            lock (sculptCache)
            {
                foreach (var img in sculptCache.Values)
                    img.Dispose();
                sculptCache.Clear();
            }

            lock (Prims) Prims.Clear();
            lock (Avatars) Avatars.Clear();

            TexturesPtrMap.Clear();

            if (glControl != null)
            {
                glControl_UnhookEvents();
                try
                {
                    glControl.MakeCurrent();
                }
                catch { }
                try
                {
                    glControl.Dispose();
                }
                catch { }
            }
            glControl = null;

            GC.Collect();
        }
SceneWindow