2009년 09월 04일
[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)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]