我有一个有两个无模式窗口的应用程序。第一个窗口有一个按钮,用于从另一个窗口获取输入。我的问题是什么是(有吗?)调用第二个窗口进行输入并阻止调用者的正确方法,直到用户在文本框中提供输入。这是我在这里试图解释的视觉效果:
- 应用程序启动。主窗口打开
- 用户单击主窗口中的第一个按钮 -> 第二个“无模式”窗口打开。用户切换回主窗口
- 用户点击主窗口中的第二个按钮 -> 第二个“无模式”窗口被激活并聚焦
- 第二个窗口现在等待输入到文本框中。这就是问题所在:如何阻止来自主窗口的调用,等待文本框中的输入,只有当用户在文本框中输入输入时才返回调用者,而不冻结窗口
我现在有这个 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;
}
}