#c# #multithreading #console #console-application
#c# #многопоточность #консоль #консоль-приложение
Вопрос:
Я хочу, чтобы новая консоль открывалась всякий раз, когда я создаю новый поток, чтобы вывод был организован. Мое приложение полностью основано на консоли. Возможно ли это, если да, то как?
С уважением!
Комментарии:
1. Открыть новую консоль, передать ее потоку при его запуске?
2. Может ли процесс иметь более одной консоли?
3. Я думаю, вам, возможно, придется создать стандартное окно с текстовым полем и направить вывод туда. У меня такое ощущение, что у процессов есть только одна консоль. Не уверен, что в .net все по-другому, но в Win32 ситуация именно такова.
4. @DavidHeffernan: вы правы. Я посмотрел на консольный класс , ожидая увидеть
Console.Create
метод, но его нет.5. В моем случае у меня есть несколько консолей для каждого потока, я просто хочу одну.
Ответ №1:
A process can be associated with only one console
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681944 (v = против 85).aspx
Комментарии:
1. Это означает, что он должен создать несколько процессов с одним потоком в каждом?
2. @DaeMoohn Нет, это означает, что он не может создавать несколько консолей в одном приложении.
3. Это интересное ограничение.
Ответ №2:
Обойти это ограничение не сложно.
Код, который вы хотите запустить как отдельный поток с собственным консольным окном, просто закодируйте как отдельное консольное приложение, передавая требуемые параметры в командной строке.
Затем запустите отдельные экземпляры этого кода с помощью Start() внутри вашего основного приложения.
Ответ №3:
Мне удалось заставить это работать, заменив TextWriter (консоль.SetOut()) и сохранение значений в ThreadLocal
Затем, когда вы получаете значения из вашего TextWriter, они указаны для каждого потока