2011-09-01 2 views
1

내가 기능이나 UI 스레드에 속하는 구성 요소를 변경 절차 작업자 스레드에서 전화를 만들기 위해 호출/BeginInvoke를 사용하는 필요성을 이해 귀찮게 왜 -가 InvokeRequired를 확인해야하는 좋은 이유는 무엇입니까? 이벤트 핸들러가 다른 상황에서 작업자 스레드 또는 UI 스레드에서 호출 될 수 있다고 가정 해보십시오. UI 스레드에서 호출 자체가 실행될 메서드에서 호출하도록하는 데 어떤 영향이 있습니까?</p> <p>내 질문은 ... InvokeRequired

말 ... 이제

Private Sub SomeProcedure() Handles event1, event2, event3 
    Me.Invoke(New delegateSomeProc(Address of SomeProc)) 
EndSub 

, ... 호출 호출 EVENT1 어떤 위험에도 불구하고, 어쨌든 다른 스레드에서 UI 스레드 만 이벤트 2/OR3 화재에서합니다 Event1 화재가 말 그럴 필요 없어? 조금 비효율적입니까?

+1

참조 : http://stackoverflow.com/questions/747210/whats-wrong-with-calling-invoke-regardless-of-invokrecquired – stuartd

+0

@ Stuart - 감사합니다. 해당 질문에 태그를 추가하여 검색 가능성을 높였습니다. –

답변

2

UI 스레드 호출 자체가 실행될 메서드에서 호출하도록하는 데 어떤 영향이 있습니까?

내가 알고있는 유일한 차이점은 컨트롤 핸들이 만들어지기 전에 호출하면 Invoke을 사용하면 실패합니다.

article은 문제를 자세히 설명합니다.

+0

이 기사가 정확하다면 실제로 강력하고 흥미로운 점이 있습니다. "사실 Invoke 메서드는이 경우에"올바른 작업을 수행 "하고 스레드에 마샬링하지 않고 대상 대리자를 직접 호출합니다 Control 인스턴스를 소유하고 있습니다. " 아무도 이것을 논박 할 수 있습니까? InvokeRequired가 필요한 경우를 더욱 약화시키지 않습니까? 필수 사항입니까? –

2

UI 스레드 호출 자체가 실행될 메소드에서 호출하는 데 어떤 영향이 있습니까?

아니요, 호출이 필요하지 않은 것처럼 성능이 아닌 다른 결과는 없습니다. 직접 메서드 호출은 Invoke 인프라를 통과하는 것보다 빠릅니다.

+0

내가 잘 생각했을 정도로 잘 작동하는 것처럼 보였다. 그것은 임베디드 컨트롤 시스템을위한 것입니다. 그래서이 시스템에서 실행되고있는 것은 아무것도 없지만,이 한가지 어플리케이션 만 있으면된다는 철저한 보장이 있습니다. 비록 내가 필요로하는 것보다 더 많은 헤드 룸을 처리하는 명령을 가지고있다 할지라도 어쨌든 그것을하는 것이 여전히 최선의 방법 일 것이라고 생각합니다. –

관련 문제