2

文字列のリストをパラメーターとしてコンソール アプリケーション (C# で開発) に渡す必要があります。コンソール アプリケーションは、次のように System.Diagnostics.Process.Start で開始されます。

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

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

どうすればこれを達成できますか?

4

3 に答える 3

3

ランニング

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)) 

または似たようなもの。

アップデート

もちろん、そのプロセスにデータを渡すための、より洗練された方法を検討することもできます。一般的な方法は次のとおりです。

  • データベース
  • ファイルシステム (ファイル)
  • WCF

アップデート

コメントで提供されたコンテキストを考えると、同期に使用されるデータベースを使用して、サーバー上で実行される完全に別の Windows サービス (ノンストップ、呼び出しなし) を選択します。

  • Tasks列を持つテーブルを持つデータベースinput dataoutput dataおよびその他の必要なもの (日付やユーザー ID など)
  • 処理対象のデータとしてそのテーブルに行を挿入する Web ページが表示されます
  • Windows サービスが繰り返し (x 秒ごとに) 未処理のタスクをテーブルに照会し、タスクがあれば実行します。output data結果は列に保存されます
  • ユーザー要求の Web ページで特定のタスクをクエリし、そのステータスを表示し、出力データがある場合はそれを表示します

これははるかに堅牢であり、ユーザー トラフィックの増加に合わせてより適切に拡張できます。複数のコアを利用するために、サービス自体が個別のタスクのワーカー スレッドを生成するのが理想的です。このようなアーキテクチャが整っていれば、パフォーマンスを最適化し、タスクを監視する方法がたくさんあります。

于 2012-04-04T10:12:53.703 に答える
0
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));
于 2012-04-04T10:10:05.923 に答える
0

多分あなたはリストの内容を作成します

String.Join(";", myList);

そしてあなたのアプリケーション内であなたはそれを再構築しました

String.Split(";", receivedParameter);

もう 1 つの可能性は、リストの内容をファイルに書き込んで、コンソール アプリケーションが読み込む必要があるファイル名のみをパラメーターとして提供することです。

于 2012-04-04T10:08:31.860 に答える