2017-03-15 1 views
0

모달 윈도우 폼을 열면 배경에 파일을 만들고 그 안에 생성 시간을 쓰는 Windows 데스크톱 응용 프로그램이 있습니다. 이 파일을 5 초마다 업데이트하고 작성 시간과 비교하여 60 분 후에 모달 창이 자동으로 닫히고 파일이 삭제됩니다. 파일 만들기/삭제 및 시간 추적은 백그라운드에서 수행되어야하므로 사용자는 해당 모달에서 작업하는 동안이 영향을받지 않습니다.Windows 모달이 열리는 매초마다 파일을 업데이트하십시오.

Windows 데스크톱 응용 프로그램에서이 작업을 수행 할 수 있습니까?

+3

왜 파일과 같은 방법을 시도 할 수 있습니다 또는 당신은 timer.SynchronizingObjectmodalForm에 설정할 수 있습니다? 왜 타이머를 사용하지 않습니까? –

+0

왜 그렇게해야합니까? –

+0

예. 지금까지 뭔가 해봤습니까? 이 코드는 "나를위한 코드 작성"질문과 유사하기 때문에. – Alex

답변

1

파일을 만들고 정기적으로 업데이트하고 확인할 필요가 없습니다. 당신은 타이머이 훨씬 쉽게 달성 할 수있다 : 당신이 모달 폼의 Close 메서드를 호출 할 때 Control.Invoke을 채택 할 필요가 있으므로

var modalForm = new ModalForm(); 
var timer = new System.Timers.Timer(new TimeSpan(1, 0, 0).TotalMilliseconds); 
timer.Elapsed += (s, ea) => { modalForm.Invoke(new MethodInvoker(modalForm.Close)); }; 
modalForm.Shown += (s, ea) => { timer.Start(); }; 
modalForm.FormClosed += (s, ea) => { timer.Stop(); }; 
modalForm.ShowDialog(); 

Timer.Elapsed 핸들러가 별도의 스레드에서 실행되고 있습니다. 간단히

var modalForm = new ModalForm(); 
var timer = new System.Timers.Timer(new TimeSpan(1, 0, 0).TotalMilliseconds); 
timer.SynchronizingObject = modalForm; 
timer.Elapsed += (s, ea) => { modalForm.Close(); }; 
modalForm.Shown += (s, ea) => { timer.Start(); }; 
modalForm.FormClosed += (s, ea) => { timer.Stop(); }; 
modalForm.ShowDialog(); 
0

, 당신은 다음과 같은

private void Form1_Load(object sender, EventArgs e) 
    { 
     Timer MyTimer = new Timer(); 
     MyTimer.Interval = (60 * 60 * 1000); // 60 mins 
     MyTimer.Tick += new EventHandler(MyTimer_Tick); 
     MyTimer.Start(); 
    } 

    private void MyTimer_Tick(object sender, EventArgs e) 
    { 
     MessageBox.Show("The form will now be closed.", "Time Elapsed"); 
     this.Close(); 
    } 
관련 문제