Вызов метода "Main" консольного приложения из приложения формы (по событию нажатия кнопки)

как я могу получить доступ и запустить консольное приложение из windows form, который является частью того же проекта. У меня есть форма Windows и консольное приложение. Я думаю, что могу опубликовать консольное приложение, а затем использовать Process.Start(path to console app) но это не то, чего я хочу. Я хочу получить доступ и использовать Main метод консольного приложения в проекте my form. Этот метод будет работать при нажатии на кнопку.

это дает следующую ошибку.

исключение InvalidOperationException не обработано Не удается прочитать ключи, если ни в одном из приложений нет консоли или когда ввод консоли был перенаправлен из файла. Попробуйте Console.Читать.

private void buttonApplication_Click(object sender, EventArgs e)
{
  Ch15Extra_2.Program.Main();
}

вот методы.

ConsoleApp:

namespace Ch15Extra_2
{
  public class Program
  {
    public static void Main()
    {
      Console.WriteLine("Here the app is running");
      Console.ReadKey();
    }
  }
}

форма form1:

private void buttonApplication_Click(object sender, EventArgs e) { }

1 ответов


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

вы можете разделить свое решение на три части.

  1. приложения WinForms часть
  2. часть консоли
  3. библиотека Dll.

связать dll с первым и вторым проектами.

затем, если вам нужно запустить общий код из приложения WinFomrs, вы может сделать:

private void buttonApplication_Click(object sender, EventArgs e)
{
    var shared = new SharedClass();
    shared.Run();
}

SharedClass будет реализован в третьем проекте. Вы можете вызвать его из консольного приложения тоже.


upd

Проект 1: ClassLibrary.

public class SharedClass
{
    public int DoLogic(int x)
    {
        return x*x;
    }
}

Proj 2. Приложения WinForms. Имеет ссылку на проект 1

использование Shared;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        TextBox textBox = new TextBox();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var shared = new SharedClass();
            textBox.Text = shared.DoLogic(10).ToString();
        }
    }
}

proj 3. Консольное Приложение

    public class Program
    {
        public static void Main()
        {
            Console.WriteLine("Here the app is running");
            var shared = new Shared.SharedClass();
            Console.WriteLine(shared.DoLogic(10));
            Console.ReadKey();
        }
    }

Я только что проверил - все работает.