2017-12-22 17 views
-5

나는 버튼과 타이머가 있으며, 10 분마다 코드를 실행하며, 복잡성 때문에 약 2 분이 걸린다. 계산, 내가 버튼을 누르면 다른 양식을 열 때, 내 문제는 타이머가 시작될 때까지 프로그램이 멈추고 모든 계산이 끝날 때까지 타이머가 실행되기 시작하는 양식을 사용할 수 없다는 것입니다. 타이머가없는 다른 양식. 백그라운드에서 타이머를 실행하는 메서드를 찾을 수 없습니다. 타이머가 계산을하는 동안 다른 양식을 수행하려고합니다.C# 어떻게 타이머를 배경으로 작동합니까?

+1

몇 가지 코드를 제공해 주시겠습니까? – Toodoo

+2

[ask]를 읽고 [둘러보기]를 보시기 바랍니다. – Plutonix

+2

timer 메서드 내에서'BackgroundWorker' 또는'Task' 만 사용하십시오. Winforms 타이머는 항상 UI 스레드에서 실행되므로 사용자가 말한 것처럼 고정됩니다. – Alejandro

답변

2

Timer.Tick 이벤트 처리기가 UI 스레드에서 실행됩니다. 나는. 응용 프로그램의 기본 스레드. 이 스레드는 화면에서 응용 프로그램을 그릴 책임이 있습니다. UI 스레드에서 이벤트 핸들러를 실행하면이 핸들러에서 모든 UI 컨트롤을 사용할 수 있지만 Tick 이벤트 핸들러에서 장기 실행되는 모든 작업은 UI가 그려지지 않으므로 애플리케이션을 고정시킵니다.

대신 System.Threading.Timer를 사용해야합니다. 콜백은 백그라운드 스레드에서 실행됩니다. 응용 프로그램은 UI를 그리는 데 주 스레드를 사용하며 다른 스레드의 포트에서 데이터를 읽습니다.

timer = new System.Threading.Timer(_ => CheckPort(), null, 30000, 0); 

30000을 시간으로 교체하십시오.

private void CheckPort() 
{ 
    //view form 
} 

희망이 도움이 될 것입니다!