Ejemplo n.º 1
0
        public void Dispose()
        {
            State = TVTCommentState.Disposing;
            if (!quickDispose)
            {
                try
                {
                    //相手からCloseを要求を受けていないなら
                    if (!isClosing)
                    {
                        closingResetEvent.Reset();
                        //CloseIPCMessageを相手に送る
                        ipcModule.Send(new IPC.IPCMessage.CloseIPCMessage()).Wait();
                        //相手からCloseIPCMessageが来るまで待つ、1秒以内に来なかったら無視して進める
                        closingResetEvent.Wait(1000);
                    }
                }
                catch { }
            }

            foreach (var chatService in ChatServices)
            {
                chatService.Dispose();
            }

            //メール欄例保存
            this.Settings.ChatPostMailTextExamples = this.ChatPostMailTextExamples.ToArray();

            //各種SubModule破棄
            CommandModule?.Dispose();
            ChatCollectServiceCreationPresetModule?.Dispose();
            DefaultChatCollectServiceModule?.Dispose();
            ChatModule?.Dispose();
            ChatTrendServiceModule?.Dispose();
            ChatCollectServiceModule?.Dispose();
            if (ipcModule != null)
            {
                ipcModule.Disposed        -= ipcManager_Disposed;
                ipcModule.MessageReceived -= ipcManager_MessageReceived;
                ipcModule.Dispose();
            }

            // 設定保存。asyncだがawaitせずに例外は無視。
            this.settingReaderWriter.Write(this.Settings).Wait(5000);

            State = TVTCommentState.Disposed;
        }