Example #1
0
        public void RunAsync()
        {
            Stop();

            /* ステータス初期化 */
            ClearMessage();
            ClearComment();

            AddMessage(ScriptMessageType.Informational, "<< Script Build and Start >>");

            if ((script_code_ == null) ||
                (script_code_.Length == 0)
                )
            {
                return;
            }

            lock (task_sync_obj_) {
                script_busy_ = true;

                /* スクリプトタスク開始 */
                if (task_thread_ == null)
                {
                    task_thread_  = new Thread(RunTask);
                    task_sandbox_ = new ScriptSandbox(this, task_thread_);

                    task_thread_.Start();
                    task_watcher_ = (new RunTaskWatcherHandler(RunTaskWatcher)).BeginInvoke(null, null);
                }
            }

            /* 開始イベント */
            StatusChanged?.Invoke(this, EventArgs.Empty);
        }
Example #2
0
        public void Stop()
        {
            StopAsync();

            /* 実行中タスクを取得 */
            var task_thread = (Thread)null;

            /* 多重解放を防ぐため実行中タスクを未登録にする */
            lock (task_sync_obj_) {
                task_thread   = task_thread_;
                task_thread_  = null;
                task_sandbox_ = null;
            }

            /* 実行中タスクを停止 */
            if (task_thread != null)
            {
                if (!task_thread.Join(TASK_EXIT_WAIT_TIME))
                {
                    /* 正常終了しない場合は強制終了 */
                    task_thread.Abort();
                }
            }

            /* 監視タスクが停止するまで待つ */
            while ((task_watcher_ != null) && (!task_watcher_.IsCompleted))
            {
            }
        }