Передача аргументов из приложения Windows Form - PullRequest
2 голосов
/ 27 июня 2019

У меня есть данные из полей ввода в простой форме Windows, которые я хотел бы передать обратно в пакетный файл или в вызывающую программу.

  • Возвращаемые данные имеют сложный характер. Что-то, что может быть представлено в виде полезной нагрузки XML или JSON. Поэтому числовой ExitCode не подходит.

  • Если я изменю тип возврата основного метода на строку вместо void, программа не будет вызываться.

  • Аргументы Enviromnent неизменны, поэтому вы не можете делать что-то вроде:


string args[] = Environment.GetCommandLineArgs();
args[1] = 'blah';

(аргументы 0 - это вызываемая программа).

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

Оба эти решения могут работать, но это кажется чрезмерным излишним, что-то, что просто сделать в памяти :

  • розетки
  • записать данные в файл xml для вызывающего абонента.

Вы могли бы подумать, что можно вернуть строку. Я что-то упускаю?

Сноска:

(К сожалению для меня - мне пришлось прибегнуть к записи данных в файл. Запись данных в консоль и перенаправление вывода консоли в файл привела к появлению сообщения «файл используется другим процессом» обратно в Automation Anywhere. , приложение RPA, к которому я пытался передать данные). Такова жизнь! Using Automation Anywhere

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Программа WinForms может выводить необходимые данные в стандартный поток / канал вывода. Что-то вроде:

Console.WriteLine(outputDataString);

(Console.WriteLine сокращение от Console.Out.WriteLine)

Проект приложения не обязательно должен быть изменен на «Консольное приложение» (как предлагается в вопросах / ответах, подобных этому: « windows form .. console.writeline () где находится console? » ), хотя, хотя и действует предостережение: записанные данные не будут отображаться в консоли вызывающей стороны (например, если приложение WinForms было запущено из окна консоли), но они все равно будут записаны в стандартный поток вывода / канал. (*)

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

for /f "usebackq" %%i in (`pathToYourWinFormsExecutable.exe`) do echo %%i

(Чтобы получить дополнительную помощь в адаптации этого к вашим потребностям, откройте окно консоли и введите for /?. Это даст подробное объяснение того, что вы можете сделать с помощью команды for.)



(*) Мнение стороны: Тем не менее, возможно, это необычное и странное поведение, позволяющее программе записывать данные в стандартный выходной поток / канал, причем эти данные никогда не отображаются в окне консоли, если они явно не перехвачены или не перенаправлены. В зависимости от сценария реального использования, а также жизненного цикла программы, выполняющей это, реализация такого «странного» нелогичного поведения может быть не рекомендуемой вещью. Если обычное, нормальное поведение записи данных в стандартный выходной поток / канал появляется в окне консоли нужного абонента, предпочтительным подходом будет изменение проекта на «Консольное приложение».

0 голосов
/ 27 июня 2019

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

 class Program
 {
     static string Main(string[] args)
     {
        return "John";
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...