public UpdateThreadCommand(OperationBbs operationBbs) { Logger.Instance.DebugFormat("UpdateThreadCommand"); this.operationBbs = operationBbs; // キャンセル可能 worker.WorkerSupportsCancellation = true; worker.DoWork += (sender, e) => e.Result = UpdateDocumentText(); worker.RunWorkerCompleted += (sender, e) => { Logger.Instance.Debug("UpdateThreadCommandWorker.RunWorkerCompleted"); if ((e.Error != null) || e.Cancelled) { Logger.Instance.Debug("RunWorkerCompleted Cancell"); return; } DocumentText = e.Result as string; // 更新があった時だけ通知 if (DocumentText != beforeDocumentText) { try { Logger.Instance.Debug("PropertyChangedEventArgs(DocumentText)"); PropertyChanged(this, new PropertyChangedEventArgs("DocumentText")); } catch (Exception exception) { Logger.Instance.ErrorFormat("UpdateThreadCommandError : {0} {1}", exception.Message, exception.StackTrace); } } beforeDocumentText = DocumentText; }; }
public ThradViewerViewModel() { Logger.Instance.Debug("ThradViewerViewModel()"); operationBbs = new OperationBbs(); updateThreadCommand = new UpdateThreadCommand(operationBbs); writeResCommand = new WriteResCommand(operationBbs); updateThreadCommand.PropertyChanged += (sender, e) => RaisePropertyChanged(e.PropertyName); writeResCommand.PropertyChanged += (sender, e) => RaisePropertyChanged(e.PropertyName); // コマンドライン引数チェック if (Environment.GetCommandLineArgs().Length > 1) { string url = Environment.GetCommandLineArgs()[1]; Logger.Instance.DebugFormat("ThradViewerViewModel[url:{0}]", url); ChangeUrl(url); } }
public WriteResCommand(OperationBbs operationBbs) { Logger.Instance.Debug("WriteResCommand"); this.operationBbs = operationBbs; worker.DoWork += (sender, e) => { Logger.Instance.Debug("WriteResCommandWorker.DoWork"); e.Result = null; try { WrireResCommandArg arg = e.Argument as WrireResCommandArg; operationBbs.Write(arg.Name, arg.Mail, arg.Message); } catch (Exception excetpion) { Logger.Instance.ErrorFormat("WriteResCommandWorker.DoWork error : Message{0}\n{1}", excetpion.Message, excetpion.StackTrace); e.Result = excetpion; } }; worker.RunWorkerCompleted += (sender, e) => { Logger.Instance.Debug("WriteResCommandWorker.RunWorkerCompleted"); Exception exception = e.Result as Exception; if (exception != null) { Logger.Instance.DebugFormat("WriteResCommandWorker.RunWorkerCompleted [Message:{0}]", exception.Message); MessageBox.Show(exception.Message); } else { Logger.Instance.DebugFormat("WriteResCommandWorker.RunWorkerCompleted PropertyChanged(Message)"); PropertyChanged(this, new PropertyChangedEventArgs("Message")); } }; }
//------------------------------------------------------------- // 概要:コンストラクタ // 詳細:イベントの設定 //------------------------------------------------------------- public WriteFieldControl() { InitializeComponent(); // 選択スレッドのクリックイベント selectThreadLabel.MouseDown += (sender, e) => { if (e.Button == MouseButtons.Left) { // 選択スレッド画面を開く threadSelectView.TopMost = ParentForm.TopMost; threadSelectView.Open(); } else if (e.Button == MouseButtons.Right) { RightClick(sender, e); } }; // 新着レス表示処理 string newRes = ""; showNewResWorker.WorkerSupportsCancellation = true; // キャンセル処理を許可 showNewResWorker.DoWork += (sender, e) => { newRes = ReadNewRes(); }; showNewResWorker.RunWorkerCompleted += (sender, e) => { newResToolTip.SetToolTip(selectThreadLabel, newRes); }; // マウスオーバー時に新着レス表示 selectThreadLabel.MouseHover += (sender, e) => { // 新着レス表示の実行 if (!showNewResWorker.IsBusy) { showNewResWorker.RunWorkerAsync(); } }; // レス書き込み処理 writeResWorker.WorkerSupportsCancellation = true; writeResWorker.DoWork += (sender, e) => { string message = writeFieldTextBox.Text; WriteResResult result = new WriteResResult(); result.WriteResult = true; result.Message = message; // レス書き込み try { Logger.Instance.InfoFormat("レス書き込み [掲示板:{0} スレッド:{1}, 本文:{2}]", operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, message); operationBbs.Write("", "sage", message); Logger.Instance.InfoFormat("レス書き込み:成功 [掲示板:{0} スレッド:{1}, 本文:{2}]", operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, message); } catch (Exception ex) { result.WriteResult = false; result.Exception = ex; Logger.Instance.ErrorFormat("レス書き込み:失敗 [エラー内容{0} 掲示板:{1} スレッド:{2}, 本文:{3}]", ex.Message, operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, message); } finally { e.Result = result; } }; // 書き込み完了処理 writeResWorker.RunWorkerCompleted += (sender, e) => { WriteResResult result = (WriteResResult)e.Result; // 書き込み欄を有効 writeFieldTextBox.Enabled = true; writeFieldTextBox.WatermarkText = "書き込み内容を入力してください"; // 書き込み成功 if (result.WriteResult) { ToastMessage.Show("レス書き込みが完了しました。"); writeFieldTextBox.Text = ""; } // 書き込み失敗 else { ToastMessage.Show(string.Format("レス書き込みに失敗しました。[{0}]", result.Exception.Message)); writeFieldTextBox.Text = result.Message; Logger.Instance.ErrorFormat("{0}\n\n掲示板:{1}\nスレッド:{2}\n本文:{3}", result.Exception.Message, operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, result.Message); } // 書き込み欄をフォーカス writeFieldTextBox.Focus(); }; // 書き込みボタン押下 writeButton.Click += (sender, e) => { // レス書き込み WriteRes(); }; // スレッド変更イベント threadSelectView.ThreadChange += (sender, e) => { // スレッド情報の更新 ThreadSelectEventArgs args = (ThreadSelectEventArgs)e; operationBbs = args.OperationBbs; UpdateThreadTitle(); }; // スレッドタイトルの更新 operationBbs.ThreadListChange += (sender, e) => UpdateThreadTitle(); // 高さ自動調節 writeFieldTextBox_TextChanged(this, new EventArgs()); // 選択スレッドのレス数の更新 Timer timer = new Timer(); timer.Interval = UpdateThreadResCount; timer.Tick += (sender, e) => { operationBbs.UpdateThreadList(); UpdateThreadTitle(); }; timer.Start(); // サイズ変更時に高さの自動調節 SizeChanged += (sender, e) => { if (Visible) { Height = selectThreadLabel.Height + writeFieldTextBox.PreferredSize.Height; } else { Height = 0; } }; }
public ThreadSelectEventArgs(OperationBbs operationBbs) { this.OperationBbs = operationBbs; }