2012-06-04 3 views
1

교통 시뮬레이션 프로젝트를 지금 공부하고 있습니다. 그러나 나는 시뮬레이션을 일시 중지하는 문제가 있습니다. 각 차는 내 응용 프로그램의 스레드로 간주됩니다. 시뮬레이션이 실행 중일 때 (Cars 그리드가 움직이는 중) 멈추고 싶습니다.스레드가 데이터를 변경하는 것을 일시 중지하고 C#에서 다시 시작하는 방법은 무엇입니까?

Thread.suspend() 메서드가 작동하지 않습니다. 데이터를 변경하지 못하도록 스레드를 중지해야하기 때문입니다.

는 도로에 자동차이있는 경우의 말을하자, 나는, 일시 정지 버튼을 클릭 자동차이 유지되어야하고 난 시작 단추를 클릭 할 때 재개 할 수 있어야한다. 스레드가 블로킹을하기 때문에 직접 잠을 자도록 만들 수 없습니다. UI.

아이디어가 있으십니까?

미리 감사드립니다.

+0

_I UI_을 (를) 차단하므로 스레드가 직접 잠자기 상태가 될 수 없습니다. 자동차에 별도의 작업자 스레드를 사용하고 있습니다. 왜 작업자 스레드를 일시 중단하면 주 스레드에서 실행되는 UI가 차단됩니까? –

+0

실제로, 그것은 매우 이상합니다. myThread.suspend(); 그것은 U자를 잠그지 않는다; 그러나, 내가 그것을 thread.sleep() 메소드로 지정된 시간 동안 잠자기시키고 자 할 때, ui는 잠긴다. – Serhat

+0

thread.sleep()은 지정된 시간 동안 현재 스레드를 잠자기 상태로 만듭니다. 단추를 클릭하면 UI 스레드가 응답하지 않고 해당 기간 동안 잠자기 상태가됩니다. – tinman

답변

2

스레드를 일시 중단하지 마십시오. 각 차가 각각의 실에 있어야한다고 생각한다면, 각 차에 움직이지 않게 멈추는 (다른 것들에 계속 응답하는) '일시 정지'방법을 제공하십시오.

나는 당신이 자동차 당 쓰레드를 원한다고 생각하지 않는다. 여러 대의 Car 객체를 모두 타이머에 응답하여 움직이는 것이 어떻습니까?

+0

나는 자동차 당 많은 쓰레드를 가지고있다. 그리고 나는 특정한 수의 자동차를 포함하는 교차 클래스를 가지고있다. 그러나 교차점은 쓰레드입니다. 왜냐하면 우리는 동시에 많은 횡단을 할 것이기 때문입니다. 그리고 자동차 당 스레드의 이유는 각 자동차가 돌아갈 수있게하는 것입니다. 그들 중 일부는 다른 방향으로 갈 것이므로 우리는 그들을 그룹으로 가질 수 없습니다. 귀하의 답변에 감사드립니다. – Serhat

+0

하지만 각 차에 '일시 중지'방법을 제공하고 결과에 대해 알려 드리겠습니다. – Serhat

+0

당신이 말했듯이, 이제는 성공적으로 멈 춥니 다. 저는 모든 차량을 하나씩 함께 멈추려고했습니다. 고마워요. – Serhat

관련 문제