WPF ShowDialog в запущенном процессе не блокирует главное окно текущего процесса - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть оконное приложение, которое запускает процесс с окном WPF. Я отправляю текущий идентификатор процесса в начальный процесс, чтобы окно WPF могло правильно установить владельца:

MainWindow mainWindow = new MainWindow();
int parentProcessId = int.Parse(e.Args[0]);
System.Diagnostics.Process parentProcess = System.Diagnostics.Process.GetProcessById(parentProcessId);
WindowInteropHelper helper = new WindowInteropHelper(mainWindow);
helper.Owner = parentProcess.MainWindowHandle;
mainWindow.ShowDialog();

Alt + Tab работает как положено - окно WPF блокирует родительское окно. Но он не блокирует элементы управления родительской вдовы, поэтому я могу нажать sh каждую кнопку в родительском окне и даже закрыть ее.

Я запускаю новый процесс, как этот:

string arguments = Process.GetCurrentProcess().Id.ToString();
ProcessStartInfo startInfo = new ProcessStartInfo(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "WPF.App.exe"), arguments);
Process.Start(startInfo);

Как можно ли открыть окно WPF, чтобы оно блокировало элементы управления окна владельца (а не только отображалось сверху и блокировало Alt + Tab)?

Спасибо.

1 Ответ

0 голосов
/ 30 апреля 2020

Предполагается, что родительский процесс также является приложением WPF:

private void SomeMethod()
{
    string arguments = Process.GetCurrentProcess().Id.ToString();
    ProcessStartInfo startInfo = new ProcessStartInfo(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "WPF.App.exe"), arguments);
    childProcess = Process.Start(startInfo);
    childProcess.Exited += childProcess_Exited;
    childProcessWaitFrame = new DispatcherFrame;
    Dispatcher.PushFrame(childProcessWaitFrame);
}

private void childProcess_Exited(object sender, EventArgs e)
{
    childProcessWaitFrame.Continue = false;
}
...