我需要将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
当然,你可能想要考虑一些更为文明的将数据传递给这个过程的方法。 常见的方法包括:
UPDATE
鉴于评论中提供的上下文,我会选择一个完全独立的Windows服务在服务器上运行(不停,没有调用)与数据库用于同步:
Tasks
与列input data
, output data
和任何其他你可能想要的(如一些日期或用户ID) 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));