使用_getch()的C#控制台窗口问题

时间:2010-08-10 10:53:17

标签: c# console

我使用С#

在我的Windows应用程序表单中嵌入了一个控制台窗口

我有一个在控制台窗口中运行的应用程序。我的c#项目是一个GUI,用于显示此输出并向其发送参数。

大多数工作正常,除非从我的GUI到控制台窗口调用_getch(),它往往会冻结整个系统。

任何人都知道为什么会发生这种情况?

如果需要,我可以发布代码。

谢谢

3 个答案:

答案 0 :(得分:2)

赔率是_getch()是阻止通话。

答案 1 :(得分:0)

_getch()做什么。如果它阻止了UI线程,你可以在另一个线程中启动它。

答案 2 :(得分:0)

在用户按下键盘上的输入键之前,_getch()函数不会返回。如果从程序的主线程调用此函数,则会停止UI线程。它不会抽取消息循环,当UI不再处理输入事件或绘制窗口时,UI会冻结。几秒钟后,Windows将鬼窗口置于标题栏中,并显示“无响应”。

从后台线程调用_getch()会解决问题,这可能不方便。您可以使用_kbhit()来检查键击是否可用。在_kbhit()返回true之后调用_getch()将不会阻塞。可能也不方便。在_kbhit()返回false的同时尝试抽取消息循环在技术上是一个解决方案,如果它不是用于生成错误代码的消息循环。

请注意,您可以在控制台窗口中键入Ctrl + S来暂停输出,Ctrl + Q会再次恢复输出。你仍然会阻止UI线程,但至少你会故意这样做。