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

方法は次のとおりです。

ConsoleApp:

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アプリなしでコンソールアプリを実行する必要があり、コンソールアプリを実行せずにコンソールコードを実行したい場合は、次の提案があります。

ソリューションは3つの部分に分けることができます。

  1. WinFormsパート
  2. コンソール部分
  3. DLLライブラリ。

dllを最初のプロジェクトと2番目のプロジェクトにリンクします。

次に、WinFomrsアプリから共有コードを実行する必要がある場合は、次の操作を実行できます。

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

SharedClass3番目のプロジェクトで実装されます。コンソールアプリからも呼び出すことができます。


upd

プロジェクト1:ClassLibrary。

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

プロジェクト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();
        }
    }
}

プロジェクト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 に答える