Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Console Forn + Windows Form, Вызов консоли из WF приложения 
:(
    Опции темы
VisualProgrammerNET
Дата 22.12.2005, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Суть беды:

1) Создал консольное приложение с паблик методом

Код

public static void WriteMessage (string message)
{
     Console.WriteLine(message);
}


2) Скомпилировал.
3) В приложении Windows Forms теперь надо как-то реализовать методы, которые
а) запускал бы консольное приложение
б) обращался бы к методу WriteMessage из консоли.

Как? smile


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
arilou
Дата 22.12.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



VisualProgrammerNET

Самый простой способ - поменять в свойствах своего проекта на Console Application, тогда консоль будет видна, и открывать и показывать форму в static void Main()


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 22.12.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(VisualProgrammerNET @ 22.12.2005, 13:31)
а) запускал бы консольное приложение

то есть стартовал отдельный процесс?


--------------------
user posted image
PM MAIL WWW   Вверх
VisualProgrammerNET
Дата 22.12.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Не-не-не... тут немножко другое. У меня приложение Windows Form (назовём его А), а консольное приложение (Б) - отдельно. Я его хочу использовать Б для трассировки А. В А я добавил референс на Б, но никаких новых неймспейсов не появилось. Как обращаться из А к Б - непонятно...

Цитата

то есть стартовал отдельный процесс?


Ага.

Это сообщение отредактировал(а) VisualProgrammerNET - 22.12.2005, 15:06


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
arilou
Дата 22.12.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



VisualProgrammerNET
Использовать ProcessStartInfo.StandardInput, ProcessStartInfo.StandardOutput пробовал?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
VisualProgrammerNET
Дата 22.12.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Я такими вещами ещё не пользовался никогда... smile Я ещё только в начале пути изучения C#. Не расскажете, что это за вещи, и как ими пользоваться?


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
arilou
Дата 22.12.2005, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(VisualProgrammerNET @ 22.12.2005, 15:18)
Я такими вещами ещё не пользовался никогда

Сорри, опечатался. Должно было быть Process.StandardInput, Process.StandardOutput

Если в двух словах, то примерно так:

Код

using System.Diagnostics;

Process prc = new Process();
prc.StartInfo.FileName = "MyApp.exe";
prc.Start();

// здесь надо подождать, пока в консоли появятся данные
MessageBox.Show(prc.StandardOutput.ReadToEnd());



--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
VisualProgrammerNET
Дата 22.12.2005, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



// здесь надо подождать, пока в консоли появятся данные

так вот в том-то и проблема, что непонятно, как в консоль эти данные передать smile


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
arilou
Дата 22.12.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



А может вот так получится?

Код

System.IO.StreamWriter wr = new System.IO.StreamWriter(prc.StandardOutput);
wr.Write("something");



--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
VisualProgrammerNET
Дата 22.12.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



smile Спасибо


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
VisualProgrammerNET
Дата 22.12.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



А нельзя ли всё же как-нибудь обратиться от одного приложения к другому? В смысле, из одного вызвать метод другого?


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
arilou
Дата 22.12.2005, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



VisualProgrammerNET
Можно. Для этого есть такая штука как Remoting. Читай MSDN smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
VisualProgrammerNET
Дата 22.12.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Да... где-то я натыкался на подобную штуку уже, когда бороздил интернет в поисках ответа на этот вопрос. Думал, можно будет без Remoting'а обойтись... ну да ладно smile


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
arilou
Дата 22.12.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(VisualProgrammerNET @ 22.12.2005, 16:44)
можно будет без Remoting'а обойтись... ну да ладно

Можно, вот так smile

1. Первая программа (П1) создает файл C:\Command.txt
2. Вторая программа (П2) ставит на него FileSystemWatcher
П1 управляет П2
3. П1 пишет в файл строку вида Command param1 param2 и закрывает файл
4. В П2 срабатывает FileSystemWatcher. П2 прочитывает, разбирает и выполняет команду.


smile Шутка. Читай про Remoting - это интересная шутка




--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
VisualProgrammerNET
Дата 16.2.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



До ремоутинга руки так и не дошли.

А если два проекта (консольный и винформ) в одном солюшене? Это не меняет дела никак? smile


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
arilou
Дата 16.2.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



VisualProgrammerNET,

Опиши задачу по-подробнее. Думаю, решение мы тебе найдем.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
VisualProgrammerNET
Дата 16.2.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Итак, значица...

В солюшене находятся: консольное (вспомогательное, для трассировки)(А) и виндоус-формс (Б) проекты. Во время действия Б, она передаёт открытому методу в А команду, вследствие чего в консоли А повляется новая текстовая строка.

Пример.
В приложении Б выполняется метод ObjectMove, по перемещению некого объекта. В реализации ObjectMove имеется строка, которая выполняет метод AddMessage из приложения А. Метод AddMessage заключается в том, что на консоль выводится строка типа "Object in B has is being moved".

Собсно, вот что надобно получить. Может есть какие-нибудь другие методы? Я просто не в курсе, можно ли из виндового приложения вызывать консоль... smile


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
Exception
Дата 16.2.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



А что мешает реализовать класс DiagnosticsHelper в консольном приложении, который имеет статические методы типа WriteMessage, записывающие в консоль сообщения, а потом добавить ссылку на это консольное приложение в Windows-приложении и использовать этот DiagnosticsHelper?
PM   Вверх
arilou
Дата 17.2.2006, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



VisualProgrammerNET,
Вопрос 1: а почему 2 отдельных приложения. В описанном тобой сценарции я не вижу такой необходимости. Создаешь консольное приложение, которое открывает окно, и все будет ок.

Вопрос 2: желание выводить в консоль вызвано ностальгией по ДОСу? smile ИМХО, удобнее выводить в текстбокс, который открывается в отдельном окне при старте твоей программы.

Цитата(Exception @ 16.2.2006, 21:54 Найти цитируемый пост)
А что мешает реализовать класс DiagnosticsHelper в консольном приложении, который имеет статические методы типа WriteMessage, записывающие в консоль сообщения

Ты знаешь, как в неконсольном приложении открыть окно консоли?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 17.2.2006, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Exception @ 16.2.2006, 20:54 Найти цитируемый пост)
А что мешает реализовать класс DiagnosticsHelper в консольном приложении, который имеет статические методы типа WriteMessage, записывающие в консоль сообщения, а потом добавить ссылку на это консольное приложение в Windows-приложении и использовать этот DiagnosticsHelper?

Никакого смысла в этом нет, т.к. на тип приложения (Windows application) наличие ещё одного референса никак не повлияет, а вызовы Console.WriteXXX ни к чему не приведут. Кроме того, добавлять в exe референс на exe можно только начиная с Framework 2.0

Цитата(arilou @ 17.2.2006, 01:11 Найти цитируемый пост)
как в неконсольном приложении открыть окно консоли

да здравствует WinAPI ! с его помощью мы сотворим маленькое чудо smile
Код
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace TestWindowsApplication
{
    public class Form1 : Form
    {
        static bool console_exists = false;

        [DllImport("Kernel32.dll")]
        extern static bool AllocConsole();

        private void button1_Click(object sender, EventArgs e)
        {
            if(!console_exists)
            {
                AllocConsole();
                console_exists = true;
            }

            Console.WriteLine("AAA");
        }



--------------------
user posted image
PM MAIL WWW   Вверх
arilou
Дата 17.2.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(mr.DUDA @ 17.2.2006, 08:56 Найти цитируемый пост)
да здравствует WinAPI ! с его помощью мы сотворим маленькое чудо

О чудо! Я знал, что WinAPI нам точно поможет, но ты привлек его! smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
VisualProgrammerNET
Дата 17.2.2006, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Насколько я понял из последних тем на форуме, WinAPI может всё smile Околотемный вопрос: где можно его изучить? Книжицы есть какие-нибудь?


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 17.2.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



См. в разделе по С++


--------------------
user posted image
PM MAIL WWW   Вверх
arilou
Дата 20.2.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



VisualProgrammerNET, да, но главное - не изборетать велосипед. Для этого надо знать более 6000 классов .NET framework smile
Добавлено @ 15:07
Так что выбирай, что лучше изучать более плотно smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1204 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.