public static void Poll() { var update_list = new List <ScriptController>(); var remove_state = false; lock (controller_list_sync_) { /* 実行 */ foreach (var controller in controller_list_) { if ((controller.Poll()) && (!controller.IsDetach)) { update_list.Add(controller); } } /* デタッチ済みスクリプトを解放 */ remove_state = (controller_list_.RemoveAll(script => script.IsDetach) > 0); /* アップデートリストから削除済みコントローラを削除する */ update_list.RemoveAll(controller => !controller_list_.Contains(controller)); } if (update_list.Count > 0) { update_list.ForEach(controller => ControllerStatusUpdated?.Invoke(controller)); } if (remove_state) { ControllerListUpdated?.Invoke(); } }
public static ScriptController Register(string script_path, ScriptRunMode mode) { if (script_path == null) { return(null); } /* ファイルが存在しなければ無視 */ if (!File.Exists(script_path)) { return(null); } var controller = (ScriptFileController)null; var add_state = false; var update_state = false; lock (controller_list_sync_) { /* 登録リストから検索 */ controller = controller_list_.Find(script => script.ScriptPath == script_path); /* 未登録の場合は新規登録 */ if (controller == null) { controller = new ScriptFileController(script_path); controller_list_.Add(controller); add_state = true; } } /* モード変更 */ if ((controller != null) && (controller.Mode != mode)) { controller.Mode = mode; update_state = true; } /* イベント */ if (add_state) { ControllerListUpdated?.Invoke(); } else if (update_state) { ControllerStatusUpdated?.Invoke(controller); } return(controller); }