Как правильно ждать ввода из немодального окна

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

  1. Приложение запускается. Откроется главное окно
  2. Пользователь нажимает первую кнопку в главном окне -> открывается второе "немодальное" окно. Пользователь возвращается в главное окно
  3. Пользователь нажимает вторую кнопку в главном окне -> второе "немодальное" окно активируется и фокусируется
  4. Второе окно теперь ожидает ввода в текстовое поле. Вот где возникает вопрос: как заблокировать вызов из главного окна, дождаться ввода в текстовое поле и вернуться к вызывающему только тогда, когда пользователь ввел ввод в текстовое поле, не замораживая окна

У меня есть этот sudo-код в качестве решения на данный момент, но цикл происходит внутри основного кода приложения, и он использует слишком много процессора для простого цикла. Не уверен, есть ли лучший / правильный способ сделать это в C# и WPF в частности:

// input control mechanism
private object _inputLock = new object();
private bool _waiting = false;

// public string ReadInput() method starts waiting
do {
    // pass control to dispatcher to update ui
    inputTb.Dispatcher.Invoke(
        () => { },
        System.Windows.Threading.DispatcherPriority.Background
    );

    lock (_inputLock) {
        if (!_waiting)
            break;
    }
} while (true);

// input text box handler turns off waiting
private void SendInput() {
    lock (_inputLock) {
        _waiting = false;
    }
}

0 ответов

Другие вопросы по тегам