public void RemoveHandler(ListAddedEventHandler h) { lock (lock_object) { ListAdded -= h; } }
/// <summary> /// デバッグ用に思考エンジンとやりとりしているログを画面上に表示するためのダイアログ。 /// </summary> /// <param name="log"></param> public DebugWindow(MemoryLog log) { InitializeComponent(); var ListAdded_ = new ListAddedEventHandler(args => { try { // UIスレッドからの呼び出しを保証する。 TheApp.app.UIThread(() => ListAdded(args)); } catch { } // 終了間際だとInvoke()で例外が出るかもしれないので握りつぶしておく。 }); log.AddHandler(ListAdded_, ref log_list); FormClosed += (sender, args) => { log.RemoveHandler(ListAdded_); }; memory_log = log; UpdateListBox(); // すぐに入力出来るようにフィルター用のテキストボックスにフォーカスを移動させておく。 ActiveControl = textBox1; FontUtility.ReplaceFont(this, TheApp.app.Config.FontManager.DebugWindow); }
/// <summary> /// Listが1行追加されたときに呼び出されるハンドラをセットして、 /// その時点でのlistをコピーして取得する。 /// </summary> /// <param name="h"></param> /// <param name="list"></param> public void AddHandler(ListAddedEventHandler h, ref Queue <string> list) { lock (lock_object) { ListAdded += h; list = new Queue <string>(LogList); // その時点のlistをCloneして返す } }
public DebugWindow(MemoryLog log) { InitializeComponent(); var ListAdded_ = new ListAddedEventHandler(sender => { // UIスレッドからの呼び出しを保証する。 if (InvokeRequired) { Invoke(new Action(() => ListAdded(sender))); } else { ListAdded(sender); } }); log.ListAdded += ListAdded_; FormClosed += (sender, args) => { log.ListAdded -= ListAdded_; }; memoryLog = log; UpdateListBox(log.LogList); }