2010-08-10 59 views
0

我有我的Windows应用程序的形式使用内С#C#控制台窗口的问题()

我有一个在控制台窗口中运行的应用程序嵌入一个控制台窗口。我的C#项目是一个图形用户界面来显示这个输出,也可以发送参数给它。

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

任何人有任何想法,为什么会发生?

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

谢谢

回答

0

直到用户在键盘上按下键入键,_getch()函数才会返回。如果从你的程序的主线程调用这个函数,那么这将会停止UI线程。它不会泵送消息循环,当不再处理输入事件或绘制窗口时,UI会冻结。几秒钟之后,Windows将标题栏中的“Not Responding”放在适当的位置。

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

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

+0

优秀的信息那里Hans Passant,我很感谢你的回复:) – SnoopFroggyFrog 2010-08-10 12:49:34

2

赔率是_getch()是一个阻塞调用。

+0

你知道我可以通过Windows应用程序表单解决这个问题吗? – SnoopFroggyFrog 2010-08-10 12:23:05

0

_getch()做了什么。如果阻塞UI线程,则可以在另一个线程中启动该调用。

+0

_getch()将从命令提示符中读取一个按键。 问题是,我有一个程序可以在命令提示符下使用。它工作100%。 但是当我尝试通过在Visual Studio中设计的GUI通过在Windows窗体应用程序中嵌入命令提示符来使用它时。它挂起,但所有其他功能工作。所以任何想法如何我可以从我的GUI处理这个? – SnoopFroggyFrog 2010-08-10 12:43:30