System.Windows.Forms.Control
에서 파생 된 사용자 지정 컨트롤을 작성하고 있습니다.Windows Forms의 경우 PostMessage와 동일합니까?
컨트롤은 Control.KeyDown
이벤트를 사용하여 키 입력을 감시합니다. 단축키로 일부 키 입력 (예 : <Ctrl>-K
)을 처리해야하는데, 이로 인해 대화 상자가 시작됩니다. 내 onKeyDown
이벤트 처리기에서 대화를 시작하면 내가 true
와 리턴 (그래서 나는 K
키를 누를을 억제하지 못하는거야)에 KeyEventArgs.SuppressKeyPress
를 설정하기 전에
대화 상자가 표시됩니다. 대신, onKeyDown
이벤트 핸들러에서 돌아가서 나중에 대화 상자를 시작하고 싶습니다. 이렇게하려면 onKeyDown
이벤트 핸들러에서 돌아온 후에 어떻게 든 '대화 상자 시작'이벤트와 함께 다시 호출해야합니다.
Win32에서 PostMessage
API를 사용하여 등록한 창 메시지를 보내면이 이벤트를 생성 할 수 있습니다. 메시지 대기열에있는 이전 메시지 바로 다음에이 메시지가 표시되고이를 실행 신호로 사용합니다. 내 대화. 그러나 여기서는 API (SecurityPermissionFlag::UnmanagedCode
필요 없음)를 엄격하게 사용하기 때문에 PostMessage
함수 (WndProc
메서드도 사용할 수 없음)를 사용할 수 없습니다.
그렇다면 비동기 콜백을 예약하는 스레드 (내 UI 스레드)에 대해 관리되는 동등 물은 무엇입니까? 아마 어떤 종류의 타이머일까요? 어떤 종류의 자기 - Invoke
?
감사합니다. 나는 컨트롤의 BeginInvoke 호출 자체가 동기화 호출을 초래할 것이라고 잘못 가정했다. – ChrisW
@JimHarte 여기 InvokeDelegate는 .NET 프레임 워크의 대리자이거나 자신을 선언해야하나요? –
@AgnelKurian 나만의. http://msdn.microsoft.를 참조하십시오.com/ko-ko/library/0b1bf3y3 % 28v = 예를 들어 vs.110 % 29.aspx. –