0

我有一个有两个无模式窗口的应用程序。第一个窗口有一个按钮,用于从另一个窗口获取输入。我的问题是什么是(有吗?)调用第二个窗口进行输入并阻止调用者的正确方法,直到用户在文本框中提供输入。这是我在这里试图解释的视觉效果:

在此处输入图像描述

  1. 应用程序启动。主窗口打开
  2. 用户单击主窗口中的第一个按钮 -> 第二个“无模式”窗口打开。用户切换回主窗口
  3. 用户点击主窗口中的第二个按钮 -> 第二个“无模式”窗口被激活并聚焦
  4. 第二个窗口现在等待输入到文本框中。这就是问题所在:如何阻止来自主窗口的调用,等待文本框中的输入,只有当用户在文本框中输入输入时才返回调用者,而不冻结窗口

我现在有这个 sudo 代码作为解决方案,但是循环发生在主应用程序代码中,并且它使用了太多的 cpu 只是循环。不确定在 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;
    }
}
4

0 回答 0