我有一个C#控制台应用程序。只要我的计算机正在运行,该控制台应用程序就打算在后台运行。此时,该控制台应用程序如下所示:
static void Main(string[] args)
{
while (true)
{
if (args.Length > 0)
{
Console.WriteLine("Args received!");
foreach(var arg in args)
{
Console.WriteLine("Arg: " + arg);
}
}
}
}
控制台最初将加载大量数据。这就是为什么我要保持运行而不是总是启动它的原因。尽管如此,一旦它运行,我需要一种从另一个控制台窗口再次“调用”它的方法。
目前,我正在考虑使用
启动上面显示的控制台应用程序START /B MyConsole.exe
从命令行。然后,我想在另一个控制台窗口中传递数据,如下所示:
MyConsole.exe --data [some info here]
这根本感觉不对。实际上,我相当有信心这将行不通。尽管如此,我仍需要某种方式来使控制台应用程序运行,并通过命令将数据从另一个控制台窗口传递到该应用程序,如上所示。之所以采用上述方法,是因为我最终与一个第三方应用程序集成,该应用程序让我执行命令行命令。但是,因为我的数据很大,所以我需要先运行该应用程序。
如何在C#中执行此操作?
谢谢!
答案 0 :(得分:2)
此处的关键字为inter process communication。
最简单的方法可能是pipes。
尽管不再是最新,最时髦的技术,但我认为让管道在C#中轻松工作的最佳选择是WCF。
您始终可以在控制台应用程序中托管其他内容,例如ASP.NET。
保存所有数据的控制台应用程序可能会更好地实现为windows service。
如果实际上数据只是文件,则使用memory mapped file可能比进程间通信更容易。
也就是说,进程之间的通信比命令行参数要复杂得多。这些建议中没有一个特别容易实现(至少与控制台应用程序相比),并且很多细节取决于您要执行的操作的细节。
答案 1 :(得分:0)
我将创建自托管的ASP.NET Core Web Api应用程序,该应用程序将公开一些其他终结点,以便您可以根据发送的数据更改参数(将其保存在内存中的任何位置)。在后台,可能有IHostedService
的实现,它基于发送的数据循环运行并完成一些工作。