gpt4 book ai didi

c# - 如何检测鼠标单击时控制台应用程序卡住

转载 作者:行者123 更新时间:2023-11-30 15:54:39 35 4
gpt4 key购买 nike

我有一个简单的 WCF 服务,我在测试它时在控制台中运行它。有时我想让控制台窗口位于其他窗口之上,所以我单击它。这将激活“标记和粘贴”命令,然后卡住整个应用程序(服务变得无响应),直到我按下 enter。

我觉得这很烦人。

我不想禁用“标记和粘贴”,因为有时我会从控制台复制文本。

有什么方法可以检测到应用程序被卡住了吗?

如果我知道什么时候会出现这种情况,我也许可以更改窗口标题以显示警告。

编辑:这不是重复的,因为我想知道如何处理卡住而不是为什么感觉卡住。我现在知道只有对输出的写入被卡住,这导致我的应用程序感觉它被卡住了。

最佳答案

如解释in this answer ,在这种模式下,终端只是停止从您的应用程序输出中读取,这会导致您对该输出的写入(例如 Console.WriteLine(...))挂起。

如果您控制写入控制台的代码,您可以像这样实现您的目标(当检测到“卡住”时更改控制台标题):

static async Task WriteLine(string text) {            
var delay = Task.Delay(TimeSpan.FromSeconds(1));
var writeTask = Task.Run(() => Console.WriteLine(text));
var oldTitle = Console.Title;
if (await Task.WhenAny(delay, writeTask) == delay) {
// after one second Console.WriteLine still did not return
// we are probably in "mark and paste" mode
Console.Title = "FREEZED!";
}
// we cannot ignore our write, have to wait anyway
await writeTask;
Console.Title = oldTitle;
}

并使用此方法代替常规 Console.WriteLine。当然这是有限的用途,但我认为它回答了你的问题。

你可以用简单的方式测试它:

static async Task Main(string[] args) {
while (true) {
await WriteLine("test");
Thread.Sleep(1000);
}
}

并观察控制台标题将变为 FREEZED!当您处于该模式时,当您退出该模式时会变回。

关于c# - 如何检测鼠标单击时控制台应用程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940614/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com