Открыть второе окно во время выполнения метода — WPF

#c# #wpf #user-interface #window #freeze

#c# #wpf #пользовательский интерфейс #окно #замерзнуть

Вопрос:

Я хочу открыть новое окно во время выполнения моего метода, чтобы показать, что что-то делается в фоновом режиме.

 // Open second window
Encoder.Encode(imgSource, chooseDestination.Text);
// Close second window
 

РЕДАКТИРОВАТЬ: я хочу, чтобы новое окно отображалось все время, пока выполняется метод, потому что программа должна продолжаться только после завершения метода.
Я только хочу, чтобы появилось новое окно, чтобы показать пользователю, что что-то делается в фоновом режиме (например, чтобы в новом окне появился индикатор выполнения).

Комментарии:

1. Похоже, вы не задали ни одного вопроса. Но если вы покажете () окно, то пользователь потенциально может по-прежнему взаимодействовать с вашим исходным окном. Если вы сделаете окно прогресса модальным с помощью showdialog(), то это может немного усложнить код, который вы запускаете из первого окна. Например, как это закрыть модальное окно. Я предлагаю вам пересмотреть свое решение и вместо этого использовать панель. Закройте элементы управления в вашем главном окне. Установите флаг isbusy в mainwindowviewmodel true во время выполнения вашего процесса и используйте его для запуска всех команд. Установите значение false, как только закончите.

Ответ №1:

Возможно, вам следует рассмотреть возможность использования асинхронного программирования. Это полезно, когда вы не хотите замораживать компоненты приложения (например, пользовательский интерфейс), пока приложение выполняет определенные задачи.

Асинхронное программирование

Комментарии:

1. Я отредактировал свой пост, чтобы его было легче понять. Пользователь не должен иметь возможности что-либо делать во время выполнения моего метода Encode, вот почему я хочу показать новое окно только с индикатором выполнения. Таким образом, пользователь знает, что он должен ждать.

2. Window2 window = new Window2(); window.Show(); Encoder.Encode(imgSource chooseDestination.Text); window.Close(); Это то, что вы ищете?