Console.Write не работает в приложении Win Forms - PullRequest
7 голосов
/ 14 апреля 2010

Я создал приложение Windows Forms VB.NET в Visual Studio 2008. Когда я запускаю свою программу из командной строки, я не получаю вывод (только следующее приглашение).

Что я делаю не так?

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 ]

11 голосов
/ 14 апреля 2010

Протестировал похожий код с приложением C # .NET Windows Form. Хорошо выводит и издает звуковые сигналы в Visual Studio, но издает только звуковой сигнал при запуске из командной строки.

Если я изменю Тип вывода на Консольное приложение на вкладке Приложение для свойств проекта, я получу возможность использовать как форму, так и консоль :)

6 голосов
/ 22 октября 2012

Вы можете запустить свое приложение из консоли, используя myApp.exe|MORE
Таким образом, консоль будет показывать Console.WriteLine() звонки, поступающие из приложения, и будет ждать выхода из приложения.
Пожалуйста, извините за мой плохой английский.

5 голосов
/ 14 апреля 2010

Другие правы, говоря, что вам нужно запускать приложение как консольное приложение. На ваш вопрос, можете ли вы иметь как консоль, так и графический интерфейс: да. Просто добавьте ссылку на 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 голосов
/ 14 апреля 2010

Или, если у вас уже есть приложение 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);

(в формате кода)

2 голосов
/ 06 декабря 2010

Решение:

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

[код .....]

при необходимости вывода на консоль вы просто вызываете AttachConsole (-1), но не забываете делать FreeConsole () в конце вашей программы.

единственная проблема с этим решением в том, что вы прочтете что-то вроде этого:

C:> yourapp.exe
C:> Привет, мир!

Это потому, что приложение форм запускается как дочерний элемент командной строки, поэтому приглашение возвращается сразу после ввода имени приложения.

В консольном приложении командная строка возвращается после выхода из программы.

Я все еще пытаюсь найти способ работать так же, как в консольном приложении.

2 голосов
/ 14 апреля 2010

Попробуйте создать новый проект, используя вместо этого шаблон «Консольное приложение».

1 голос
/ 14 апреля 2010

Для использования консоли необходимо создать приложение командной строки / консоли, а не приложение формы Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...