スレッドを使用しない定周期イベント
・スレッドを使用しない定周期イベント
/// <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(); }