Console.Write在Win Forms App中不起作用

时间:2010-04-14 14:11:36

标签: vb.net winforms console

我在Visual Studio 2008中创建了一个VB.NET Windows窗体应用程序。当我从命令行运行我的程序时,我没有输出(只有下一个提示)。

我做错了什么?

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Debug.Write("Foo")
    Debug.Flush()
    Console.WriteLine("foo")
    Console.Beep(800, 100) 'confirm this function is called'
    Me.Close()
End Sub

编辑:程序可以有表单和控制台吗?

EDIT2:何的答案有效。但是,输出显示在下一个命令行提示符下。 Winforms应用程序可以告诉命令行等待它完成而不是立即返回吗?

7 个答案:

答案 0 :(得分:11)

使用C#.NET Windows窗体应用程序测试了类似的代码。在Visual Studio中很好地输出和发出蜂鸣声,但在命令行运行时只发出蜂鸣声。

如果我将项目属性的应用标签下的输出类型更改为控制台应用,我将同时使用表单和控制台:)

答案 1 :(得分:6)

您可以使用myApp.exe|MORE来从控制台运行您的应用 这样,控制台将显示来自应用程序的Console.WriteLine()来电,并等待应用程序退出 请原谅我的英语不好。

答案 2 :(得分:5)

其他人说你需要将你的应用程序作为控制台应用程序运行是正确的。关于你是否可以同时拥有控制台和GUI的问题:是的。只需在项目中添加对System.Windows.Forms的引用,对于应用的Main方法,请包含以下代码:

' here instantiate whatever form you want to be your main form '
Dim f As New Form1

' this will start the GUI loop, which will not progress past '
' this point until your form is closed '
System.Windows.Forms.Application.Run(f)

答案 3 :(得分:3)

或者如果您已经有一个WinForms应用程序,可以使用AttachConsole API将控制台附加到它。

using System.Runtime.InteropServices;  

...

[DllImport("kernel32.dll")] static extern bool AttachConsole(int dwProcessId);
private const int ATTACH_PARENT_PROCESS = -1;  

...

AttachConsole(ATTACH_PARENT_PROCESS);

(格式化为代码)

答案 4 :(得分:2)

尝试使用“控制台应用程序”模板创建新项目。

答案 5 :(得分:1)

您必须创建命令行/控制台应用程序而不是Windows窗体应用程序才能使用控制台。

答案 6 :(得分:1)

解决方案是:

Declare Function AttachConsole Lib "kernel32.dll" (ByVal dwProcessId As Int32) As Boolean
Declare Function FreeConsole Lib "kernel32.dll" () As Boolean

[code .....]

当需要控制台输出时,您只需调用AttachConsole(-1),但记得在程序结束时执行FreeConsole()。

此解决方案的唯一问题是您将阅读以下内容:

C:> yourapp.exe
C:> Hello World!

这是因为表单应用程序作为命令提示符的子项运行,因此在您键入应用程序名称后立即返回提示符。

在控制台应用程序中,程序退出后返回命令提示符。

我仍在尝试找到一种与控制台应用程序具有相同行为(同步运行)的方法。