코딩에 익숙하지 않고 문제가 있습니다.Windows 응용 프로그램에서 타이머 사용
ScatterMode 탭을 누르면 시작할 타이머를 사용하고 싶습니다. "Dosomething"기능을 실행하기 전에 4 초 카운팅을 시작합니다. 이 사이클은 내가 프로그램을 중단하기로 결정할 때까지 반복 될 것입니다. 하지만 내가 얻을 문제는,이 코드는 2loop처럼 올바르게 실행됩니다. 그 후 타이머 종류가 미친 LOL이됩니다. 틱 이벤트의 핸들러 내부의 틱 이벤트를 처리, 타이머에 새로운 이벤트 핸들러를 추가
는 System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
//ScatterMode Tab
private void Scatter_modeToolStripMenuItem_Click(object sender, EventArgs e)
{
timer.Interval = 4000;
timer.Enabled = true;
timer.Tick += new EventHandler(Dosomething);
timer.Start();
}
private void Dosomething (object sender, EventArgs e)
{
timer.Stop();
timer.Enabled = false;
Grab.buffer(out buffer, out status, 6000);
Scatter_mode(buffer);
pictureBox1.Refresh();
int done_grab = 1;
if (doneGrab == 1)
{
timer.Interval = 4000;
timer.Enabled = true;
timer.Tick += new EventHandler(Scatter_modeToolStripMenuItem_Click);
timer.Start();
done_grab = 0;
}
}
"종류의 무엇을 갈 않습니다 미친 "뜻? – Enigmativity
일반적으로 UI를 잠그기 때문에'Forms.Timer'를 사용하지 말 것을 권장합니다. "Dosomething"을 실행하기 전에 4 초 카운팅을 시작하거나, 지연을 사용하거나, 위협을 일시 중지 할 수 있습니다. – Ferus7
@ Ferus7 thread라고 생각합니다. 일시 정지는 Timer를 사용하는 것보다 훨씬 더/더 문제가 될 것입니다. OP가 창 메시지를 처리하는 것과 동일한 스레드를 사용하는 경우 4 초 동안 잠자기하면 응용 프로그램이 시각적으로 멈추고 루핑이 처리되는 방식에 따라 절대로 얻을 수 없습니다 메시징 대기열로 돌아가려면 (사용자 입력으로부터 앱을 영원히 정지 시키십시오.) 다른 스레드가 사용되면, 창 컨트롤은 작성된 스레드에서만 액세스해야하기 때문에 호출이 필요합니다. 이렇게하면 불필요한 복잡성이 추가됩니다. 타이머가 가장 좋은 간단한 솔루션입니다. –