나는 C#에서 알고리즘을 구현하고 그것을 위해 GUI를 만들고 싶다. GUI에서 버튼을 넣고 싶다. gui가 알고리즘에서 앞으로 나아 간다. 그래서 나는 멈춤과 같은 것을 넣어야한다고 생각한다. ? 내 코드의 모든 문장을 클릭하면 다시 시작할 수 있습니다. 어떻게해야합니까? 또는이 아이디어를 구현하기위한 다른 제안이 있습니까? 그것을 "일시 중지"적극적으로 대신 당신이 "사전"그것을 적극적 것 - 정말 당신이 상태 머신로 알고리즘을 설정해야합니다 같은C#에서 단계별 단추를 구현하는 방법은 무엇입니까?
답변
는 소리가 난다.
당신은 반복기 블록을 찾을 수 있습니다 유용한 ... 당신의 알고리즘이 순간에 하나의 방법에 꽤 많은 경우, 일부를 반환, 각 논리적 인 단계의 끝에 yield return
문을 삽입을 변경할 수 있습니다 현재 상태 표시.
이것은 완전히 반복자 블록을 사용하는 것은 아니지만, 여기서는 가장 간단한 방법 일 수 있습니다. 귀하의 UI는 처음에 GetEnumerator
으로 전화를 걸었고 버튼을 클릭 할 때마다 MoveNext()
으로 전화를 걸었습니다 (그 다음 Current
속성에 액세스하여 현재 상태로 전환). iterator가 끝나면 iterator를 처리하는 것을 잊지 마십시오.
알고리즘에서 "단계"가 무엇인지 결정해야합니다.
interface ISteppedAlgorithm
{
bool NextStep(); //returns if the algorithm is finished
IStepResult LastStepResult {get;}
}
을 지금 당신의 GUI는이 방법으로 제조 된 알고리즘을 운전할 것 : 그럼 당신은 당신의 알고리즘을 다시 다음과 같은 인터페이스와 클래스에 포장해야합니다. 버튼을 누르면 NextStep() 메서드가 호출됩니다. false를 반환하면 버튼을 비활성화합니다 (또는 다른 모든 방법으로 해당 버튼이 모두 완료되었음을 나타냅니다). 그런 다음 LastStepResults를 읽고 display.h를 업데이트하십시오.
- 알고리즘을 UI 스레드와 다른 스레드에서 실행하십시오.
- 동기화를 위해 대기 핸들을 만듭니다. AutoResetEvent.
- "pause"문은 알고리즘 스레드가 호출하는
myWaitHandle.WaitOne()
입니다. - UI 스레드에서
myWaitHandle.Set()
을 실행하여 알고리즘을 계속 허용하십시오.
이 방법을 사용하면 알고리즘 단계가 실행되는 동안 사용자 인터페이스가 응답 속도를 유지할 수 있습니다.
나는 당신이 기본적으로 이전/다음 버튼이있는 응용 프로그램 인 "마법사"를 원한다고 생각합니다. 그냥 장기 실행 작업을하고 거기에 약간의 휴식을 원한다면
http://www.differentpla.net/content/2005/02/implementing-wizard-c
그러나, 그것을 해결하기 위해 여러 가지 방법이 있습니다.
여러 가지 방법으로 원하는 작업을 수행 할 수 있습니다.
방법이 완료되면 사용자가 다음에 치울 때까지 기다리십시오.
보자 당신이 특정 var에 설정 될 때까지 스레드 잠을하게 기다려야한다 그것의 자신의 스레드와 지점에서 실행 작업 : true로
LongRunningMethod1(); while(continue1 == true) { Thread.Sleep(50); } LongRunningMethod2() while(continue2 == true) { Thread.Sleep(50); }
설정 continue1 2 당신의 주 스레드는 배경 스레드가 자신의 작업을하도록합니다.
알고리즘이 발전 할 때 상태를 "관찰"하는 경우 일부 이벤트 (끝에 단지 하나)를 추가하고 이벤트 처리기에 상태 배열을 저장하게하는 것이 좋습니다. UI는 필요에 따라 앞뒤로 \ backwards를 반복 할 수 있습니다.
- 1. C에서 라이브 비디오 방송을 구현하는 방법은 무엇입니까?
- 2. C에서 일반 매크로를 구현하는 방법은 무엇입니까?
- 3. C에서 usermode timer를 구현하는 방법은 무엇입니까?
- 4. objective-c에서 Perl 해시를 구현하는 방법은 무엇입니까?
- 5. Asp.Net에서 로그 오프 단추를 구현하는 가장 좋은 방법은 무엇입니까
- 6. C에서 사전을 구현하는 빠른 방법
- 7. C에서 컴파일러를 코딩하는 방법은 무엇입니까?
- 8. C에서 qsort를 구현하는 방법
- 9. 목표 -C에서 중간 지점/Bresenham 원 알고리즘을 구현하는 방법은 무엇입니까?
- 10. Objective-C에서 조각 별주기 함수를 구현하는 가장 좋은 방법은 무엇입니까?
- 11. C에서 동적 크기 조정 스택을 구현하는 가장 좋은 방법은 무엇입니까?
- 12. C에서 ssh 기능을 사용하여 콘솔을 구현하는 방법은 무엇입니까?
- 13. AIX (단계별)에서 Ocaml을 컴파일하는 방법은 무엇입니까?
- 14. 누름 단추를 만드는 방법은 무엇입니까?
- 15. iPhone에서 iAD를 응용 프로그램으로 구현하는 방법은 무엇입니까?
- 16. 단계별 디버깅 목표 c
- 17. Android 위저드 (단계별) 애플리케이션
- 18. C#에서 상속을 구현하는 방법은 무엇입니까?
- 19. SOAP을 구현하는 방법은 무엇입니까?
- 20. 대기중인지도를 구현하는 방법은 무엇입니까?
- 21. IDEA를 구현하는 방법은 무엇입니까?
- 22. 리스너를 구현하는 방법은 무엇입니까?
- 23. initWithObjects를 구현하는 방법은 무엇입니까?
- 24. 스크롤을 구현하는 방법은 무엇입니까?
- 25. 배지를 구현하는 방법은 무엇입니까?
- 26. C에서 거대한 행렬을 구현하는 방법
- 27. ASP.NET 웹폼에 여러 개의 기본 단추를 구현하는 가장 좋은 방법
- 28. c에서 비밀번호를 마스크하는 방법은 무엇입니까? C에서
- 29. 단계별 방법을 통해 단계별 방법으로 플렉스 빌더
- 30. CFUserNotificationDisplayAlert에 단추를 추가하고 제어하는 방법은 무엇입니까?