将string列表传递给控制台应用程序

我需要将string列表作为parameter passing给控制台应用程序(使用C#开发)。 控制台应用程序以System.Diagnostics.Process.Start启动,如下所示:

string fname = "testDoc"; List<string> myList; //initialized elsewhere Process console = Process.Start("Client.exe", "-filename:"+fname+ " -list:"+myList); 

我怎样才能做到这一点?

运行

 Process console = Process.Start("Client.exe", "-filename:" + fname + " -list:" + myList) 

将执行myList.ToString()并将转换为:

 Client.exe -filename:testDoc -list:System.Collections.Generic.List`1[System.String] 

这不是你想要达到的。 尝试

 Process console = Process.Start("Client.exe", "-filename:" + fname + " -list:" + String.Join(",", myList)) 

或类似的东西。

UPDATE

当然,你可能想要考虑一些更为文明的将数据传递给这个过程的方法。 常见的方法包括:

  • 数据库
  • 文件系统(文件)
  • WCF

UPDATE

鉴于评论中提供的上下文,我会选择一个完全独立的Windows服务在服务器上运行(不停,没有调用)与数据库用于同步:

  • 数据库与表Tasks与列input dataoutput data和任何其他你可能想要的(如一些日期或用户ID)
  • 网页将作为要处理的数据插入到该表中
  • windows服务重复(每x秒)查询表中的未处理的任务,并执行任务,如果有的话; 结果保存在output data列中
  • 在用户请求网页查询给定的任务,并显示它的状态,显示输出数据,如果有的话

随着用户流量的增长,这种功能更加强大,性能也更好。 服务本身理想情况下会为独立的任务产生工作线程以利用多个内核。 有了这样的体系结构,有很多方法来优化性能和监视任务。

也许你通过创建列表内容

 String.Join(";", myList); 

并在你的应用程序中重建它

 String.Split(";", receivedParameter); 

另一种可能性是将列表内容写入一个文件,并只提供一个文件名作为参数,控制台应用程序必须读入。

 string listValues = String.Join(",", myList.Select(s => String.Format("\"{0}\"", s)).ToArray()); Process console = Process.Start("Client.exe", String.Format("-filename:\"{0}\" -list:{1}", fname, listValues));