Как написать в командной строке из приложения WPF?

Привет, я знаю, как писать на консоль, но если я напишу на консоль в своей программе и вызову свою программу из командной строки, она ничего не отобразит.

Как это сделать, когда я говорю, что Console.WriteLine или Console.Out.Writeline ir печатает в командной строке, из которой она была вызвана, а не где-то еще?

Еще раз я знаю, как сделать Console.WriteLine, так что это не так:-p, если я не ошибаюсь.

Из того, что я могу сказать, возможно, что-то связано с Console.SetOut(TextWriter t)

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

Если возможно, мне нужно условно отобразить консоль. т.е. если запустить из командной строки (или даже с помощью аргументов команды), отобразить или отправить в приглашение, в противном случае нет.

Ответ 1

Задайте тип проекта "Консольное приложение" вместо "Приложение Windows". Это заставит приложение подключаться к консоли, с которой она была запущена (или создать консоль, если она еще не была).

Ответ 2

Это фактически тривиально:

public void WriteToConsole(string message)
{
  AttachConsole(-1);
  Console.WriteLine(message);
}
[DllImport("Kernel32.dll")]
public static extern bool AttachConsole(int processId);

Этот метод будет писать ваше сообщение на консоль, если ваша программа была запущена из командной строки, иначе ничего не будет.

Если вы хотите использовать альтернативный механизм вывода, когда вы не были запущены из командной строки, вы можете сделать это следующим образом:

public void WriteToConsole(string message)
{
  _connected = _connected || AttachConsole(-1);
  if(_connected)
    Console.WriteLine("Hello");
  else
    ... other way to output message ...
}
bool _connected;
[DllImport("Kernel32.dll")]
public static extern bool AttachConsole(int processId);

Ответ 3

Это должно работать нормально, дважды и тройным образом проверить, что вы сделали, и, если возможно, опубликовать свой код. Вы могли бы посмотреть в свойствах проекта и проверить, что тип вывода установлен в "Консольное приложение" (я считаю, что его так называли: oP)