我正在处理Windows窗体。我有两个应用程序,一个是父项,另一个是孩子。在我的主应用程序中,我有一个包含大量记录的网格。用户需要选择一条记录并单击按钮,我需要将所选记录的数据作为参数发送到子应用程序,如
Process.Start("path to child exe","selected record's data");
之后我将把数据发送到子应用程序,
Environment.GetEnvironmentVariables()[0];
现在,当完成从父项发送数据的处理时,子应用程序需要自动关闭。在父应用程序之后,所选择的gridview行需要向前移动一行并将所选行信息发送到子应用程序,并且该过程需要迭代,直到它遍历主应用程序中gridview中的所有记录。
答案 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
}
然后,我建议检查其他选项:
如果这是一个非托管的Windows应用程序,您仍然可以调用其方法。使用 DllImport :
[DllImport(LibraryName, EntryPoint = FunctionName)]
private static extern int Function(string param);
然后,您就可以从代码中调用功能。谷歌有关详细信息。
答案 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)
通过命令行参数传递数据可能会变得混乱。使用套接字会更健壮。