2011-12-15 2 views
2

저는 머신 비전 프로젝트에서 일하고 있습니다. 저는 인쇄 검사를 위해 카메라를 사용하고 있습니다. 내 응용 프로그램에서 나는 화면에 이미지를 표시하는 하나의 그림 상자와 두 개의 버튼을 사용하고 있습니다. 두 개의 버튼에는 라이브 디스플레이 용 버튼과 fullscreen.With 용 livedisplay 버튼을 사용하여 while 루프의 picturebox에 이미지를 표시하고 있습니다. 동시에 while 루프에서 나는 fullscreen 버튼을 눌러야한다. 루프가 실행되는 동안에는 폼의 버튼을 누를 수 없으므로 전체 화면 버튼을 누를 수 없습니다. (루프가 잠시 있습니다.) 왜 이런 일이 발생합니까? 루프가 실행되는 동안 어떻게이 버튼을 클릭 할 수 있습니까?while 루프가 실행 중일 때 버튼을 누르는 방법?

답변

1

하나의 솔루션은 while 루프를 실행하는 것이 아니라, 일정 간격으로 타이머를 사용하고 타이머 틱에서 그림 상자의 이미지를 업데이트하십시오. Liveupdate 버튼을 클릭 할 때 타이머를 시작할 수 있습니다. 간격을 매우 낮게 (예 : 100ms) 유지하면 업데이트로 인해 생생하게 느껴질 수 있습니다. 이렇게하면 응용 프로그램이 다른 버튼 클릭과 같은 다른 사용자 작업에 대한 입력을받을 때 두 가지 업데이트 사이에 일정한 간격이 제공됩니다.

3

멋진 멀티 스레딩 세계에 오신 것을 환영합니다. while 루프를 별도의 스레드에 넣어야 UI가 응답 성이 유지됩니다. 스레딩은 길고 깊은 개념이며이를 수행하는 데 수 백만 가지 방법이 있습니다.

경로는 BackgroundWorker 스레딩 모델을 사용하는 것이 가장 바람직합니다. 자세한 내용은 here을 참조하십시오.

+0

링크를 제대로 가져올 수 없습니다 .. –

+0

링크를 편집했습니다. 원래는 잘못된 링크 (Silverlight 용)를 제공했지만 고정되지는 않았지만 분명히 충분하지 않았습니다. 어쨌든, 지금 일해야합니다. –

+0

그리고 처음에는 조금 복잡해 보일지라도 BackgroundWorker 모델은 응용 프로그램을 멀티 스레드하는 아주 간단한 방법입니다. 그리고 이것은보다 진보 된 멀티 스레딩 개념에 대한 좋은 소개입니다. –

관련 문제