6

如何从属于同一项目的 Windows 窗体访问和运行控制台应用程序。我有一个 Windows 窗体和一个控制台应用程序。我认为我可以发布控制台应用程序然后使用Process.Start(path to console app),但这不是我想要的。我想Main在我的表单项目中访问和使用控制台应用程序的方法。此方法将在单击按钮时运行。

这给出了以下错误。

InvalidOperationException 未处理 当任一应用程序没有控制台或控制台输入已从文件重定向时,无法读取密钥。试试 Console.Read。

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

以下是方法。

控制台应用程序:

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

表格1:

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

1 回答 1

8

如果您需要在没有 WinForms 应用程序的情况下运行控制台应用程序,并且有时您想在不运行控制台应用程序的情况下执行一些控制台代码,我有一个建议给您:

您可以将解决方案分为三个部分。

  1. WinForms 部分
  2. 控制台部分
  3. dll库。

将 dll 链接到第一个和第二个项目。

然后,如果您需要从 WinFomrs 应用程序运行共享代码,您可以执行以下操作:

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

SharedClass将在第三个项目中实施。您也可以从控制台应用程序调用它。


更新

项目 1:类库。

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

项目 2. WinForms。参考项目 1

使用共享;

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();
        }
    }
}

项目 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();
        }
    }

我刚刚检查过 - 它有效。

于 2012-10-02T13:19:26.320 回答