여기에서 여러 게시물을 읽었으며 Google의 참고 자료를 통해 읽었지만 적절한 해결책을 찾지 못했습니다.메인 애플리케이션의 스레드 ID 받기
대화 상자를 표시하는 어셈블리가 있지만 해당 대화 상자가 주 스레드에서 표시되어야합니다. 호출자는 .NET 응용 프로그램 또는 기본 응용 프로그램 일 수 있습니다.
개념적으로, 단순히 응용 프로그램의 주 스레드 ID를 얻은 다음 System.Windows.Threading.Dispatcher.FromThread(main_thread_id_here)
을 호출하여 Dispatcher를 얻은 다음 Invoke
을 호출하여 주 스레드의 대화 상자를 표시하십시오. 그러나, 나는 주 스레드 ID를 얻는 방법을 알아낼 수 없었다.
내 다음 접근 방식은 (다른 SO 질문의 조언을 따르고) Process.GetCurrentProcess().Threads
을 반복하고 처음에 시작된 ProcessThread
의 스레드 ID를 얻습니다. 하지만 이제는이 ProcessThread
을 가지고 있으므로 해당 Thread
개체를 가져올 방법이 없습니다. 나는 현재 실행중인 모든 .NET 쓰레드 목록을 현재 프로세스에서 얻을 수 있고 어떤 스레드가 주 스레드인지 결정하기 위해 GetHashCode
을 통해 쓰레드 ID를 비교할 수 있다고 생각했다. 그런 다음 FromThread
을 사용하여 Dispatcher
을 얻을 수는 있지만 아무 것도 검색하는 데는 아무 정보도 찾을 수 없었습니다. ProcessThreads
!
누구나 위에서 설명한 방법을 사용하거나 다른 접근 방법을 사용하여이 문제를 해결하는 방법에 대한 정보를 얻을 수 있습니까? 호출 응용 프로그램을 제어 할 수는 없습니다.
나는 이전에 이것을 시도해 보았습니다. Dispatcher.CurrentDispatcher가 반드시 주 스레드를 제공하지는 않기 때문에 작동하지 않습니다. 아주 잘 당신에게 작업 스레드를 줄 수 있습니다. IIRC에서 아직 Dispatcher가없는 스레드에서 Dispatcher를 요청하면 자동으로 작성되어 리턴됩니다. – Dave
게시물을'Application.Current.Dispatcher'로 업데이트했습니다. 이 방법은 나를 위해 일합니다. 나는 원래 다른 방식을 기억하고 있었다. 여전히 어떤 이유로 든 작동하지 않는다면,'Window's 중 하나에서 Dispatcher 오브젝트를 가져올 수 있습니다. – RandomEngy
정말 멋지다. 내 .NET 테스트 앱에서 작동한다. 벙어리 질문 - 발신자가 기본 앱인 경우에도 똑같이 작동합니까? – Dave