-4

私はWindowsフォームに取り組んでいます。2 つのアプリケーションがあります。1 つは親で、もう 1 つは子です。私の主なアプリケーションでは、一連のレコードを含むグリッドがあります。ユーザーは 1 つのレコードを選択してボタンをクリックする必要があります。選択したレコードのデータを、次のような引数として子アプリケーションに送信する必要があります。

Process.Start("path to child exe","selected record's data");

その後、子アプリケーションに送信されたデータを次のように取得します。

Environment.GetEnvironmentVariables()[0];

親から送信されたデータの処理が完了すると、子アプリケーションは自動的に閉じる必要があります。その後、親アプリケーションでグリッドビューの選択された行を1行前にシフトし、その選択された行情報を子アプリケーションに送信する必要があり、メインアプリケーションのグリッドビューのすべてのレコードをトラバースするまでプロセスを繰り返す必要があります。

4

3 に答える 3

2

まず第一に、あなたはそれに気付くでしょう。

Process.Start()

イベントSystem.Diagnostics.Processを持つオブジェクトへの参照を返します。Exited次に、別の行に進むハンドラーをフックして、プロセスを再起動できます。

var process = Process.Start("path to child exe","selected record's data");
process.Exited += (sender, args) => 
{
   // do your stuff
}

次に、これを行うための他のオプションを確認することをお勧めします。

  • これは .net マネージ アプリケーションですか? プロジェクトで .exe アセンブリを参照し、提供されたインターフェイスを介して必要なメソッドを呼び出すことはできますか?
  • これが管理されていない Windows アプリケーションの場合でも、そのメソッドを呼び出すことができます。そのためにDllImportを使用します。

    [DllImport(LibraryName, EntryPoint = FunctionName)]

    private static extern int Function(string param);

次に、コードからFunctionを呼び出すことができます。詳細については、Google で検索してください。

また、こちらもご覧ください: C# でマネージ DLL ファイルを呼び出すには?

于 2012-12-20T13:04:57.890 に答える
0

子アプリケーションからマスターにデータを戻す必要がない場合:

マスター アプリで、パラメーターを使用して子アプリを開始するための再帰メソッドを作成します。私の例listBox1では、データ項目のリストが含まれています:

private void button1_Click(object sender, EventArgs e)
{
    listBox1.SelectedIndex = 0;
    startChild((string)listBox1.SelectedItem);
}

void startChild(string data)
{
    ProcessStartInfo psi = new ProcessStartInfo("child.exe", data);
    Process p = Process.Start(psi);
    p.WaitForExit();
    if (p.HasExited)
    {
        if ((listBox1.SelectedIndex + 1) < listBox1.Items.Count)
        {
            listBox1.SelectedIndex++;
            startChild((string)listBox1.SelectedItem);
        }
    }
}

次に、子アプリでパラメーターを取得して処理します。

public Child()
{
    InitializeComponent();
    var data = Environment.GetCommandLineArgs()[1];
    ProcessDataAndExit(data);
}
于 2012-12-20T13:20:34.487 に答える
-1

コマンドライン引数を介してデータを渡すと、面倒になる可能性があります。ソケットを使用する方がより堅牢です。

これは役立つかもしれません: .NET でのソケット プログラミングの紹介

于 2012-12-20T13:01:23.443 に答える