我在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应用程序可以告诉命令行等待它完成而不是立即返回吗?
答案 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!
这是因为表单应用程序作为命令提示符的子项运行,因此在您键入应用程序名称后立即返回提示符。
在控制台应用程序中,程序退出后返回命令提示符。
我仍在尝试找到一种与控制台应用程序具有相同行为(同步运行)的方法。