2012-02-24 6 views
0

여러 단추가있는 양식이 있으며 사용자가 단추 중 하나를 누르면 긴 과정이 시작됩니다 (최대 몇 초 소요). 내가 원했던 것은 초기 단추 누르기에서 프로세스가 완료 될 때까지 양식의 다른 단추에서 발생하는 모든 후속 단추 누름이 무시된다는 것입니다. 실제로 일어나는 일은 후속 단추 누름이 대기열에 들어가고 각 완료에 대한 프로세스로 차례대로 실행된다는 것입니다. 내 말은, 각 버튼이 2 초 걸리는 기능을 실행하고 5 초 버튼을 매우 빠르게 누르는 경우 (2 초 미만이라고 말함) 10 초가 걸리는 일련의 이벤트가 발생합니다. 그것은 단지 첫 번째 버튼을 누르는 것으로 이끄는 것이고 두 번째는 그것이 활성화 된 기능을 수행합니다.VB.net에서 사용 중일 때 이벤트 처리 억제

저는 USB-UART 변환기를 통해 하드웨어와 인터페이스하는 소프트웨어를 작성 중이며 가상 COM 포트와 타이밍을 사용하고 있습니다. 나는 버튼을 누를 때만 무언가가 일어나기를 원합니다. 대기하고 나서 이전 작업이 끝나기를 기다린 후에는 초가 아닙니다.

답변

1

도움이 될 것입니다 희망, 방법은 BackgroundWorker 스레드 떨어져 바쁜 업무를 이동하는 것입니다. 이전 요청을 처리하는 동안 사용자가 수행 할 수있는 작업을 제한하기 위해 양식의 컨트롤을 계속 관리해야하지만 작업을 완료하는 동안 폼이 다시 채우고 다른 이벤트를 처리 할 수도 있습니다.

+0

이전에 백그라운드 작업자 클래스를 사용했습니다. 감사합니다. – CHollman82

+0

이것은 내가 찾고 있었던 행동을 준 것입니다. 감사합니다. – CHollman82

0

장기 실행 액션이 시작될 때 모든 버튼을 비활성화 한 후 완료되면 다시 활성화 하시겠습니까?

+0

나는 그것을 시험해 보았다. 그리고 그것은 시각적 인 "결함"을 일으킨다. 버튼을 비활성화하면 화면이 회색으로 변하므로 2 십여 개의 버튼을 매우 빠르게 비활성화하고 다시 활성화하면 ... "잘못된"것으로 보입니다. 옵션을 가져 주셔서 감사합니다. 최후의 수단으로 생각합니다. – CHollman82

+0

버튼을 패널에 놓은 다음 패널을 비활성화하면 어떻게됩니까? 버튼이 여전히 비활성화되어 있습니까? 또한 세부 정보를 잊어 버렸지 만 모든 단추를 비활성화하는 동안 그리기를 억제하는 방법이 없습니까? 그런 다음 모든 단추를 한 번에 비활성화 할 수있게 하시겠습니까? –

0

이렇게하는 방법에는 여러 가지가 있습니다. 가장 간단한 첫 번째 버튼을 클릭 할 때 프로세스가 완료되면 true로 다시 다음, false로 양식의 Enabled 속성을 설정 아마도 :

는 .NET에서 큐를 사용하는 내가 제안 해 드릴
Try 
    this.Enabled = False; 
    ... do your work 
Finally 
    this.Enabled = True; 
End Try 
+0

이것은 끔찍한데, 심지어 suspendlayout과 resumelayout을 사용하는 것입니다. (이것들은 내가 기대했던대로 동작하지 않습니다 ...) – CHollman82

0

..

각 버튼에서 특정 명령을 추가하거나 큐에 열거 형을 누릅니다.

모든 프로세스를 완료 한 후 명령을 대기열에서 제외하고 더 많은 명령 또는 작업을 수행 할 경우 대기열을 확인하십시오.

이렇게하면 버튼을 사용 중지하고 다시 사용하도록 설정하지 않아도됩니다.

내가이 더 어려워하지만 결실

+0

좋은 옵션처럼 보이지만 이전 이벤트가 발생하지 않을 때까지 이벤트를 전혀 얻지 못합니다 finished ... 처음에는 부울 플래그를 사용하여 응용 프로그램이 사용 중이라는 것을 나타 냈습니다. 각 이벤트에서이 플래그를 테스트하여 설정하고 적절하게 지웠으나 바쁜 것으로 판단되지는 않았습니다. 이전의 긴 작업이 끝날 때까지 이벤트 처리기 자체가 호출되지 않기 때문입니다. 이벤트의 큐잉은 내가 액세스 할 수없는 장면 뒤에 발생합니다. – CHollman82

관련 문제