- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 C# WPF 创建一个应用程序来模拟 Windows 的命令提示符,但具有更多的灵 active 和输出选项(如显示图像或表单)。我最近一直在尝试模拟 Console.ReadLine()
。我需要保持 GUI 完全响应,允许用户键入输入。同时,我需要能够从同一方法返回
答案。
我已经尝试通过使用事件来解决这个问题,但我不知道如何以不返回 void
的方式使用它们。我查看了 async
/await
和 question about it ,但不太清楚如何使用该信息。我考虑了一个事件驱动的解决方案,其中结果将存储在所有输入的永久列表变量中,我可以读取最后一个以获取最新输入,但我认为它不够好模拟。
我计划在应用程序启动后立即在主线程中创建控制台 GUI。但是,我将在另一个线程中使用它的逻辑,这将是我的代码的核心(我知道这不是一种专业的编程方式,但毕竟这是个人项目/学习经验。)然后,我想使用某种自定义 ReadLine()
方法等待用户提交文本,然后返回它。如果这是可能的,如何在 WPF 中完成?
最佳答案
以下快速而粗糙的代码应该让您了解如何实现您想要的:
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
var console = new MyConsole();
this.Content = console.Gui;
Task.Factory.StartNew(() => {
var read = console.ReadLine();
console.WriteLine(read);
});
}
}
public class MyConsole {
private readonly ManualResetEvent _readLineSignal;
private string _lastLine;
public MyConsole() {
_readLineSignal = new ManualResetEvent(false);
Gui = new TextBox();
Gui.AcceptsReturn = true;
Gui.KeyUp += OnKeyUp;
}
private void OnKeyUp(object sender, KeyEventArgs e) {
// this is always fired on UI thread
if (e.Key == Key.Enter) {
// quick and dirty, but that is not relevant to your question
_lastLine = Gui.Text.Split(new string[] { "\r\n"}, StringSplitOptions.RemoveEmptyEntries).Last();
// now, when you detected that user typed a line, set signal
_readLineSignal.Set();
}
}
public TextBox Gui { get; private set;}
public string ReadLine() {
// that should always be called from non-ui thread
if (Gui.Dispatcher.CheckAccess())
throw new Exception("Cannot be called on UI thread");
// reset signal
_readLineSignal.Reset();
// wait until signal is set. This call is blocking, but since we are on non-ui thread - there is no problem with that
_readLineSignal.WaitOne();
// we got signalled - return line user typed.
return _lastLine;
}
public void WriteLine(string line) {
if (!Gui.Dispatcher.CheckAccess()) {
Gui.Dispatcher.Invoke(new Action(() => WriteLine(line)));
return;
}
Gui.Text += line + Environment.NewLine;
}
}
关于c# - 在 WPF 中实现 Console.ReadLine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32555709/
这个问题在这里已经有了答案: What could be the reason that `require` doesn't work in some places? (3 个回答) 6 个月前关闭。
我正在使用读取行从维基百科获取一些文本。但读取行仅返回列表,而不是我想要的文本。有什么方法可以使用替代方案或解决我的问题吗? public class mediawiki { public s
我正在编写一小段代码,其中涉及使用子进程运行一个脚本来监听一些实时数据 这是我的代码: def subscriber(): try: sub = subprocess.Pope
我已包括: #include "stdio.h" #include #include 我的编译器包含标志 -lreadline 但我仍然收到错误消息: fatal error: 'readl
使用 Term::Readline::readline 停止无限循环的正确方法是什么? ? 这样我一个都看不懂 0 #!/usr/bin/env perl use warnings; use stri
标题比我的实际目标更具体: 我有一个使用 GNU Readline 的命令行程序,主要用于命令历史记录(即使用向上箭头检索以前的命令)和其他一些细节。现在,程序的输出似乎散布在用户的输入中,有时是可以
在 ipython 中,如果我按“esc”,然后按“enter”(可能还有其他字符?),读行会中断。我无法再使用“向上”键搜索命令历史记录,并且某些命令(例如 control-K)失败。 有没有办法在
我在使用 readlines() 和 readline() 返回值时遇到问题,但在使用 read() 时却没有。任何人都知道这是怎么发生的?欣赏一下 with open('seatninger.txt
标题比我的实际目标更具体: 我有一个使用 GNU Readline 的命令行程序,主要用于命令历史记录(即使用向上箭头检索以前的命令)和其他一些细节。现在,程序的输出似乎散布在用户的输入中,有时是可以
我正在编写一个聊天客户端,它必须在接收用户输入的同时输出接收到的消息。 到目前为止,我已经 fork 成两个独立的进程,其中一个继续监听套接字连接并用 printf 写出接收到的字符串。另一个使用 r
我在 NetworkStream 上使用 StreamReader,我只想读取一行或多行,而另一个数据是 byte array(如文件数据)我不想在 StreamReader 中读取该文件数据,例如我
我遇到了这两个 API,用于在 C# 的简单控制台应用程序中读取用户的输入: System.Console.ReadLine() System.Console.In.ReadLine() 这是一个我试
yum 我的系统显示已安装 readline rlwrap-0.41]$ sudo yum install readline Loaded plugins: fastestmirror, presto
我尝试做 this tutorial在 Rust 中,到目前为止,我在将 C 库连接到 Rust 时遇到了很多问题。 C 等效代码: #include #include #include #in
我正在寻找 web Python的标题中提到的命令及其区别;但是,我并不满足于对这些命令有完整的基本理解。 假设我的文件只有以下内容。 This is the first time I am posi
你如何在 F# 中使用 Console.Readline?与 Console.Writeline 不同,当我调用它时,它并没有受到尊重。 最佳答案 如果你使用 let s = Console.Read
在一次面试中,面试官问我为什么 readline() 比 Python 中的 readlines() 慢很多? 我回答的是readlines()需要多次读取,需要更多的开销。 不知道我的回答对不对。
要在 OSX Lion 上完全运行 ipython 需要什么?我试图让 ipython 与 readline 一起工作,但没有成功。 我的做法: (在虚拟环境中) pip install ipytho
在 Nodejs 文档中,我看到: import EventEmitter from 'events'; import { readFile } from 'fs'; import fs, { rea
我写了一个简单的应用程序: #include #include #include #include int main() { char *user_input; while(u
我是一名优秀的程序员,十分优秀!