Egloos | Log-in


[C#] Process를 이용한 외부 프로그램 실행하기 (2)

이전 글에서 C#에서 Process()를 사용한 외부 프로그램 실행을 소개하였다.

외부 프로그램 실행이 끝날때까지 기다리기 위해서 Thread.Sleep()을 사용할 경우,
그 프로그램이 끝날 때까지 주 프로그램은 대기 상태가 되므로..
자식 프로그램의 실행이 상당히 오래걸리는 경우에는 Timer를 사용한다.

아래는 타이머를 사용한 예제이다.
먼저 윈도우 도구상자에서 Timer 컨트롤을 폼에 끌어다 놓는다.
=============================================================
using System.Diagnostics; // Process 사용
using System.Threading;   // Timer 사용

   class RunTest
   {
        bool eventhandler1 = false;

        public void RunAbaqus(string job)
        {
            try
            {
                //eventhandler1 = false;

                Process pr1 = new Process();
                pr1.StartInfo.FileName = "abaqus"; // 프로그램 실행 커맨드
                pr1.StartInfo.Arguments = "cae noGUI=" + job; // 프로그램 실행용 추가 인자

                pr1.StartInfo.WindowStyle = ProcessWindowStyle.Normal;  // dos command 창을 열고 실행한다.
                // pr1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;  // dos command 창을 열지않고 실행한다.

                pr1.EnableRaisingEvents = true; 
                pr1.Exited += new EventHandler(cmdProcess_Exited); // 프로그램 종료 이벤트에 cmdProcess_Exited 메소드 추가

                eventhandler1 = false;

                pr1.Start();

                statusLabel1.Text = "report 파일을 생성중입니다.";
                timer1.Interval = 1000;
                timer1.Enabled = true;

                return 1;
            }
            catch
            {
                return -1; //"An error occurred running exe program
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (eventhandler1)
            {
                MessageBox.Show("외부 프로그램 실행이 종료되었습니다.");
                eventhandler1 = false;
                timer1.Enabled = false;
            }
        }

        private void cmdProcess_Exited(object sender, System.EventArgs e)
        {
            eventhandler1 = true;
        }

        private void cmdProcess_Exited(object sender, System.EventArgs e)
        {
            eventhandler1 = true; // 외부 프로그램이 종료되면 eventhandler1 전역변수를 true로 전환
        }
    }

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 헤이즐넛 | 2009/09/04 14:50 | 프로그래밍 | 트랙백 | 덧글(0)

트랙백 주소 : http://hazelstyle.egloos.com/tb/5060808
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶