this programming game을 참조하여 현재 작성 중입니다. (Robot
에서 상속)하는 방법에서WPF : 애니메이션 완료 후 메서드 반환
public class MyRobot : Robot
{
public void Run(}
{
while (true)
{
Ahead(200); //moves the bot 200pixels
TurnLeft(90); //turns the bot by 90deg
}
}
}
, 시스템은 로봇 애니메이션됩니다
나는 그런 같은 것을 구성 될 것입니다 방법 Run
있을 것이다 클래스 라이브러리 (DLL)이이 WPF를 사용하여 (BeginAnimation
또는 DispatcherTimer
사용).
이제 문제는 현재 애니메이션을 완성하기 전에 반환 할 방법이 없다는 것입니다 (즉, 다음 방법으로 넘어갑니다). 애니메이션이 함께 발생하기 때문에 결과가 무한합니다. 루프 (위의 것과 같음), 특히 좋지 않습니다.
내 질문은 애니메이션를 완료하기 전에 반환의 방법을 방지하는 가장 좋은 방법은 무엇인가, 입니까? 작업이 실행을 시작하고 (BeginAnimation
를 사용하는 경우 Completed
이벤트를 사용하여) 애니메이션 콜백에서 false
로 변경 될 때
나는 현재 true
에 그 플래그 할 것을 Robot
클래스 (isActionRunning
)에 bool
있습니다.
while (isActionRunning)
{
Thread.Sleep(200); //so that the thread sleeps for 200ms and then checks again if the animation is still running
}
이 방법은 애니메이션이 완료되기 전에 복귀 않도록이다 각 방법의 끝에
은 (BeginAnimation
를 호출 한 후) I는 다음 루프를 두었다.
하지만 이것이 올바른 방법이 아니라고 생각합니다.
아무도 나를 이룰 수있는 가장 좋은 방법으로 인도 할 수 있습니까?
훌륭합니다. while (isActionRunning) 루프 대신 제안한 것을 구현하기 위해 논리를 변경했습니다. –
이것은 * 미친 *입니다. 하나의 스레드가 다른 스레드에게 현재 작업이 완료되었음을 알리는 신호를 기다리려면 잠금 신호를 생성하지 말고 ** 신호 **를 사용하십시오. 이미 프레임 워크에서이 작업을 수행하는 객체가 있습니다. 그냥 사용하십시오. http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx –
@ Eric 왜 잠금 장치를 사용했는지 기억하지 못합니다 (1 년 전에 작성한 것입니다.) 좋은 이유 - 그러나 나는 신호가 아마도 올바른 해결책 일 수는 없다고 생각합니다. 내 경험에 의하면 뮤텍스 스타일의 잠금은 매우 강력하고 예측 가능하며 신호는 향후 모든 코드 변경을 어려운 경쟁 조건으로 바꾼다. (신호를 사용하는 C++ 멀티 스레딩 서버를 유지 관리해야했다. 동기화 - 신호에는 너무 많은 함정이있어 우습지 않다.) – Nir