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

Ste*_*ven 7 vb.net console winforms

我在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
Run Code Online (Sandbox Code Playgroud)

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

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

ano*_*ous 11

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

如果我在Project属性的Application选项卡下将Output Type更改为Console Application,我将同时使用表单和控制台:)


Iva*_*lla 6

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


Dan*_*Tao 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)
Run Code Online (Sandbox Code Playgroud)


Han*_*son 3

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

using System.Runtime.InteropServices;  
Run Code Online (Sandbox Code Playgroud)

...

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

...

AttachConsole(ATTACH_PARENT_PROCESS);
Run Code Online (Sandbox Code Playgroud)

(格式化为代码)