在两个应用程序间传递数据

时间:2012-12-20 12:43:58

标签: c# .net winforms

我正在处理Windows窗体。我有两个应用程序,一个是父项,另一个是孩子。在我的主应用程序中,我有一个包含大量记录的网格。用户需要选择一条记录并单击按钮,我需要将所选记录的数据作为参数发送到子应用程序,如

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

之后我将把数据发送到子应用程序,

Environment.GetEnvironmentVariables()[0];

现在,当完成从父项发送数据的处理时,子应用程序需要自动关闭。在父应用程序之后,所选择的gridview行需要向前移动一行并将所选行信息发送到子应用程序,并且该过程需要迭代,直到它遍历主应用程序中gridview中的所有记录。

3 个答案:

答案 0 :(得分: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);

然后,您就可以从代码中调用功能。谷歌有关详细信息。

另外,请查看:How to call a Managed DLL File in C#?

答案 1 :(得分:0)

假设您不需要将数据从子应用程序传递回master:

在您的主应用程序中,创建一个递归方法以启动带有参数的Child应用程序。在我的示例中,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);
        }
    }
}

然后在您的Child应用程序中选取参数并处理它们:

public Child()
{
    InitializeComponent();
    var data = Environment.GetCommandLineArgs()[1];
    ProcessDataAndExit(data);
}

答案 2 :(得分:-1)

通过命令行参数传递数据可能会变得混乱。使用套接字会更健壮。

这可能会有所帮助:An Introduction to Socket Programming in .NET