Хорошо я выяснил работу вокруг. Я выполняю вызов от захвата клавиатуры, используемого для реализации горячей клавиши. Вызов работает как ожидалось, если я поместил его в BackgroundWorker с паузой. Это - клудж, но я понятия не имею, почему это не работало первоначально.
void hotkey_execute()
{
IntPtr handle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += new DoWorkEventHandler(delegate
{
Thread.Sleep(10);
SwitchToThisWindow(handle, true);
});
bg.RunWorkerAsync();
}
myWindow.Activate();
Попытки принести окно к переднему плану и активирует его.
, Который должен добиться цели, если я не неправильно понял и Вы хотите Поверх остальных окон поведение. В этом случае Вы хотите:
myWindow.TopMost = true;
Если пользователь взаимодействует с другим приложением, не может быть возможно принести Ваш к передней стороне. Как правило процесс может только ожидать устанавливать активное окно, если тот процесс уже будет приоритетным процессом. (Microsoft документирует ограничения в SetForegroundWindow () запись MSDN.) Это вызвано тем, что:
Если вам нужно, чтобы окно было впереди при первой загрузке, вы должны использовать следующее:
private void Window_ContentRendered(object sender, EventArgs e)
{
this.Topmost = false;
}
private void Window_Initialized(object sender, EventArgs e)
{
this.Topmost = true;
}
Проблема могла состоять в том, что поток, называя Ваш код от рычага не был инициализирован временем выполнения, настолько звонящие методы во время выполнения не работают.
, Возможно, Вы могли попытаться делать Вызывание для маршалинга кода потока UI для вызова кода, который приносит окно к переднему плану.