Нет вывода на консоль из приложения WPF?

Я использую Console.WriteLine () из очень простого тестового приложения WPF, но когда я запускаю приложение из командной строки, я ничего не вижу в консоли. Кто-нибудь знает, что может происходить здесь?

Я могу воспроизвести его, создав WPF-приложение в VS 2008 и просто добавляя Console.WriteLine («текст») в любом месте, которое выполняется. Есть идеи?

Все, что мне нужно сейчас, – это нечто простое, как Console.WriteLine (). Я понимаю, что могу использовать log4net или somet другое решение для регистрации, но мне действительно не нужна такая функциональность для этого приложения.

Изменить: я должен был помнить, что Console.WriteLine () предназначен для консольных приложений. О, ну, никаких глупых вопросов, верно? 🙂 Я сейчас просто использую System.Diagnostics.Trace.WriteLine () и DebugView.

Вам нужно будет создать окно консоли вручную, прежде чем вы назовете какие-либо методы Console.Write. Это запустит Console для правильной работы без изменения типа проекта (который для приложения WPF не будет работать).

Вот полный пример исходного кода, как выглядит class ConsoleManager, и как его можно использовать для включения / отключения консоли независимо от типа проекта.

В следующем classе вам просто нужно написать ConsoleManager.Show() где-нибудь перед вызовом Console.Write

 [SuppressUnmanagedCodeSecurity] public static class ConsoleManager { private const string Kernel32_DllName = "kernel32.dll"; [DllImport(Kernel32_DllName)] private static extern bool AllocConsole(); [DllImport(Kernel32_DllName)] private static extern bool FreeConsole(); [DllImport(Kernel32_DllName)] private static extern IntPtr GetConsoleWindow(); [DllImport(Kernel32_DllName)] private static extern int GetConsoleOutputCP(); public static bool HasConsole { get { return GetConsoleWindow() != IntPtr.Zero; } } ///  /// Creates a new console instance if the process is not attached to a console already. ///  public static void Show() { //#if DEBUG if (!HasConsole) { AllocConsole(); InvalidateOutAndError(); } //#endif } ///  /// If the process has a console attached to it, it will be detached and no longer visible. Writing to the System.Console is still possible, but no output will be shown. ///  public static void Hide() { //#if DEBUG if (HasConsole) { SetOutAndErrorNull(); FreeConsole(); } //#endif } public static void Toggle() { if (HasConsole) { Hide(); } else { Show(); } } static void InvalidateOutAndError() { Type type = typeof(System.Console); System.Reflection.FieldInfo _out = type.GetField("_out", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); System.Reflection.FieldInfo _error = type.GetField("_error", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); System.Reflection.MethodInfo _InitializeStdOutError = type.GetMethod("InitializeStdOutError", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); Debug.Assert(_out != null); Debug.Assert(_error != null); Debug.Assert(_InitializeStdOutError != null); _out.SetValue(null, null); _error.SetValue(null, null); _InitializeStdOutError.Invoke(null, new object[] { true }); } static void SetOutAndErrorNull() { Console.SetOut(TextWriter.Null); Console.SetError(TextWriter.Null); } } 

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

Вы можете использовать

 Trace.WriteLine("text"); 

Это будет выводиться в окно «Выход» в Visual Studio (при отладке).

убедитесь, что в комплект поставки Diagnostics входит:

 using System.Diagnostics; 

Хотя Джон Лейдегрен продолжает снимать идею, Брайан прав. Я только что начал работать в Visual Studio.

Чтобы быть ясным, приложение WPF по умолчанию не создает окно консоли.

Вам необходимо создать приложение WPF, а затем изменить тип OutputType на «Консольное приложение». Когда вы запустите проект, вы увидите окно консоли с окном WPF перед ним.

Это выглядит не очень красиво, но я счел это полезным, поскольку я хотел, чтобы мое приложение запускалось из командной строки с обратной связью там, а затем для определенных параметров команды я бы отображал окно WPF.

Можно просмотреть выходные данные, предназначенные для консоли, с помощью перенаправления командной строки .

Например:

 C:\src\bin\Debug\Example.exe > output.txt 

напишет весь контент в файл output.txt .

Старый пост, но я столкнулся с этим, поэтому, если вы пытаетесь вывести что-то в Output в проекте WPF в Visual Studio, современный метод:

Включите это:

 using System.Diagnostics; 

А потом:

 Debug.WriteLine("something"); 

Я использую Console.WriteLine () для использования в окне вывода …

Я создал решение, смешав информацию о столбце varius.

Его форма, содержащая ярлык и одно текстовое поле. Консольный вывод перенаправляется в текстовое поле.

Существует также class ConsoleView, который реализует три метода публикации: Show (), Close () и Release (). Последний – для того, чтобы оставить консоль открытой и активировать кнопку «Закрыть» для просмотра результатов.

Формы называются FrmConsole. Вот код XAML и c #.

Использование очень просто:

 ConsoleView.Show("Title of the Console"); 

Для открытия консоли. Использование:

 System.Console.WriteLine("The debug message"); 

Для вывода текста на консоль.

Использование:

 ConsoleView.Close(); 

Для закрытия консоли.

 ConsoleView.Release(); 

Листья открывают консоль и include кнопку «Закрыть»

XAML

                   

Код windows:

 partial class FrmConsole : Window { private class ControlWriter : TextWriter { private TextBox textbox; public ControlWriter(TextBox textbox) { this.textbox = textbox; } public override void WriteLine(char value) { textbox.Dispatcher.Invoke(new Action(() => { textbox.AppendText(value.ToString()); textbox.AppendText(Environment.NewLine); textbox.ScrollToEnd(); })); } public override void WriteLine(string value) { textbox.Dispatcher.Invoke(new Action(() => { textbox.AppendText(value); textbox.AppendText(Environment.NewLine); textbox.ScrollToEnd(); })); } public override void Write(char value) { textbox.Dispatcher.Invoke(new Action(() => { textbox.AppendText(value.ToString()); textbox.ScrollToEnd(); })); } public override void Write(string value) { textbox.Dispatcher.Invoke(new Action(() => { textbox.AppendText(value); textbox.ScrollToEnd(); })); } public override Encoding Encoding { get { return Encoding.UTF8; } } } //DEFINICIONES DE LA CLASE #region DEFINICIONES DE LA CLASE #endregion //CONSTRUCTORES DE LA CLASE #region CONSTRUCTORES DE LA CLASE public FrmConsole(string titulo) { InitializeComponent(); lblTitulo.Content = titulo; Clear(); btnCerrar.Click += new RoutedEventHandler(BtnCerrar_Click); Console.SetOut(new ControlWriter(txtInner)); DesactivarCerrar(); } #endregion //PROPIEDADES #region PROPIEDADES #endregion //DELEGADOS #region DELEGADOS private void BtnCerrar_Click(object sender, RoutedEventArgs e) { Close(); } #endregion //METODOS Y FUNCIONES #region METODOS Y FUNCIONES public void ActivarCerrar() { btnCerrar.IsEnabled = true; } public void Clear() { txtInner.Clear(); } public void DesactivarCerrar() { btnCerrar.IsEnabled = false; } #endregion } 

код classа ConsoleView

 static public class ConsoleView { //DEFINICIONES DE LA CLASE #region DEFINICIONES DE LA CLASE static FrmConsole console; static Thread StatusThread; static bool isActive = false; #endregion //CONSTRUCTORES DE LA CLASE #region CONSTRUCTORES DE LA CLASE #endregion //PROPIEDADES #region PROPIEDADES #endregion //DELEGADOS #region DELEGADOS #endregion //METODOS Y FUNCIONES #region METODOS Y FUNCIONES public static void Show(string label) { if (isActive) { return; } isActive = true; //create the thread with its ThreadStart method StatusThread = new Thread(() => { try { console = new FrmConsole(label); console.ShowDialog(); //this call is needed so the thread remains open until the dispatcher is closed Dispatcher.Run(); } catch (Exception) { } }); //run the thread in STA mode to make it work correctly StatusThread.SetApartmentState(ApartmentState.STA); StatusThread.Priority = ThreadPriority.Normal; StatusThread.Start(); } public static void Close() { isActive = false; if (console != null) { //need to use the dispatcher to call the Close method, because the window is created in another thread, and this method is called by the main thread console.Dispatcher.InvokeShutdown(); console = null; StatusThread = null; } console = null; } public static void Release() { isActive = false; if (console != null) { console.Dispatcher.Invoke(console.ActivarCerrar); } } #endregion } 

Надеюсь, этот результат полезен.

Отъезд этот пост, был очень полезен для меня. Загрузите образец кода:

http://www.codeproject.com/Articles/335909/Embedding-a-Console-in-aC-Application

Насколько я знаю, Console.WriteLine () предназначен только для консольных приложений. Я думаю, что это твоя проблема.

  • В чем разница между библиотекой пользовательского контроля и библиотекой пользовательского контроля?
  • ElementName привязка из MenuItem в ContextMenu
  • WindowsFormsHost всегда самый верхний элемент WPF
  • Динамический генерировать столбец mvvm
  • WPF Изменение фонового изображения кнопки при нажатии
  • Как разместить содержимое WPF в приложениях MFC?
  • Динамическое добавление элементов управления в WPF MVVM
  • как можно включить полосы прокрутки в WPF Datagrid?
  • Производительность WPF Datagrid
  • Как связать перечисление с элементом управления combobox в WPF?
  • Изменение вида для ViewModel
  • Давайте будем гением компьютера.