Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串列表作为参数传递给控制台应用程序_C#_Windows_Parameters_Arguments_Console Application - Fatal编程技术网

C# 将字符串列表作为参数传递给控制台应用程序

C# 将字符串列表作为参数传递给控制台应用程序,c#,windows,parameters,arguments,console-application,C#,Windows,Parameters,Arguments,Console Application,我需要将字符串列表作为参数传递给控制台应用程序(使用C#开发)。 控制台应用程序通过System.Diagnostics.Process.Start启动,如下所示: string fname = "testDoc"; List<string> myList; //initialized elsewhere Process console = Process.Start("Client.exe", "-filename:"+fname+ " -list:"+myList); st

我需要将字符串列表作为参数传递给控制台应用程序(使用C#开发)。 控制台应用程序通过System.Diagnostics.Process.Start启动,如下所示:

string fname = "testDoc";
List<string> myList;  //initialized elsewhere

Process console = Process.Start("Client.exe", "-filename:"+fname+ " -list:"+myList);
string fname=“testDoc”;
列出我的清单//在别处初始化
Process console=Process.Start(“Client.exe”,“-filename:+fname+”-list:+myList);

我怎样才能做到这一点

也许您可以通过以下方式创建列表内容

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));
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)) 
或者类似的东西

更新

当然,你可能需要考虑一些更文明的方法来传递数据到那个过程中。常见的方法包括:

  • 数据库
  • 文件系统(文件)
  • 周转基金
更新

考虑到注释中提供的上下文,我选择在服务器上运行一个完全独立的windows服务(不停止,不调用),数据库用于同步:

  • 数据库中包含表
    任务
    和列
    输入数据
    输出数据
    以及您可能需要的任何其他数据(如某些日期或用户ID)
  • 显示将要处理的数据插入该表的网页
  • windows服务重复(每x秒)查询表中未处理的任务,并执行任务(如果有);结果保存在
    输出数据
    列中
  • 用户请求时,网页查询给定任务并显示其状态,如果存在,则显示输出数据

随着用户流量的不断增长,这一功能更加强大,扩展性也更好。理想情况下,服务本身会为单独的任务生成工作线程,以利用多个核心。有了这样的体系结构,就有很多方法可以优化性能和监视任务。

只是出于好奇。列表中有多少数据(字节长度)?该列表包含格式为“GUID\u fileName.pdf”的文档标题。关于我不知道的字节长度,我应该看看这个,因为标题会有所不同。我问这个问题是因为命令行参数有一个明确的限制length@Steve:限制约为8100个字符,即约200个GUID/文档标题。在我的情况下,这个限制是可以接受的,因此我计划在争论中通过它们。但是谢谢你的留言!好吧,那么,我仍然相信,除了像WCF这样的其他解决方案,最好将所有这些都写在一个文件中。最终,您的最大命令行限制为8191个字符(假设>=winXP)+1个很棒的提示!-控制台应用程序将从web应用程序启动。单独的进程将接收文档名称,并调用Web服务检索它们,并将它们合并到一个唯一的文件中。从web应用程序中,PrintPage.aspx将轮询一个文件夹,在该文件夹中删除生成的文件。考虑到这种情况(许多用户可以决定同时打印),您建议使用哪种方法?可以使用WCF来去除数据库;网页通过WCF调用服务,该服务执行工作并以某种方式(如文件)输出结果,以便网页可以访问它。WCF将使您能够解耦这两个,但所有这些都需要更多的工作才能做好。