スレッドを使用しない定周期イベント

・スレッドを使用しない定周期イベント

        /// <summary>
        /// タイマー
        /// </summary>
        private System.Timers.Timer _timer;
 
        List<Process> _processList = new List<Process>();
 
        /// <summary>
        /// タイマ開始
        /// </summary>
        /// <param name="aTimerEventHandler">タイマ実行イベント</param>
        /// <param name="aInterval">実行間隔</param>
        private void startTimer(ElapsedEventHandler aTimerEventHandler, int aInterval)
        {
            if (_timer != null)
                return;
 
            _timer = new System.Timers.Timer();
            _timer.SynchronizingObject = this;
 
            if (this.components == null)
                this.components = new System.ComponentModel.Container();
            this.components.Add(_timer);
 
            _timer.Elapsed += timerEventHandler;
            _timer.Interval = interval;
            _timer.Start();
        }
 
        /// <summary>
        /// 非同期で動くプロセスを起動する/終了させる
        /// </summary>
        private void runAsync()
        {
            //プロセスの起動方法を指定する
            ProcessStartInfo psi = new ProcessStartInfo(ThisAssemblyPath);
 
            //コマンドライン引数を2件指定して、
            //IsMainProcessがfalseになり、非同期処理を起動できる
            psi.Arguments = string.Format("{0}  {1}", 1, 2);
 
            Process p = new Process();
            p.StartInfo = psi;
 
            p.EnableRaisingEvents = true;
 
            p.Exited += new EventHandler(onProcessExited);
            p.SynchronizingObject = this;
            p.Start();
 
            _processList.Add(p);
        }
 
        /// <summary>
        /// プロセスをすべて終了する
        /// </summary>
        private void closeAllProcess()
        {
            foreach (var p in _processList)
                if(p != null && !p.HasExited)
                    p.CloseMainWindow();
        }