Получение идентификатора потока основного приложения - PullRequest
1 голос
/ 24 августа 2011

Я прочитал несколько постов здесь и по ссылкам из Google, но не нашел правильного решения.

У меня есть сборка, которая отображает диалоговое окно, но этот диалог должен быть показан изосновная нить.Вызывающим может быть приложение .NET или собственное приложение.

Концептуально кажется, что мне просто нужно получить идентификатор основного потока приложения, а затем вызвать System.Windows.Threading.Dispatcher.FromThread( main_thread_id_here), чтобы получить Dispatcher, а затем вызвать * 1006.* для отображения моего диалога из основного потока.Однако я не смог выяснить, как получить идентификатор основного потока.

Мой следующий подход состоял в том, чтобы (следуя совету из другого SO-вопроса) выполнить итерацию по Process.GetCurrentProcess().Threads и получить идентификатор потокаProcessThread, который был начат первым.Но теперь, когда у меня есть ProcessThread, у меня нет способа получить соответствующий Thread объект.Я решил, что затем смогу получить список всех запущенных потоков .NET в текущем процессе и сравнить их идентификаторы потоков с помощью GetHashCode, чтобы определить, какой из них является основным потоком.Затем я мог бы использовать FromThread, чтобы получить Dispatcher ... но я не смог найти никакой информации о получении чего-либо, кроме ProcessThreads!

У кого-нибудь есть советы, как решить эту проблему?проблема с использованием подхода, который я объяснил выше, или, может быть, другой подход?Пожалуйста, имейте в виду, что я не контролирую вызывающее приложение.

1 Ответ

2 голосов
/ 24 августа 2011
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
    // Show dialog
}));

Вы также можете получить диспетчер из свойства Window.Dispatcher.

...