我有2个简单的应用程序,第一个应用程序创建一个字符串,第二个应用程序读取该字符串。
App1 (ConsoleApp4.exe)
for (int i = 0; i < 16; i++)
{
string x = " " + GetRandomString(6);
Console.WriteLine("line " + (i + 1) + x);
Thread.Sleep(3000);
}
App2
Process process = new Process();
process.StartInfo.FileName = @"ConsoleApp4.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
{
// Prepend line numbers to each line of the output.
if (!String.IsNullOrEmpty(e.Data))
{
lineCount++;
//output.Append("\n[" + lineCount + "]: " + e.Data);
Console.WriteLine("\n[" + lineCount + "]: " + e.Data);
}
});
process.Start();
// Asynchronously read the standard output of the spawned process.
// This raises OutputDataReceived events for each line of output.
process.BeginOutputReadLine();
process.WaitForExit();
// Write the redirected output to this application's window.
Console.WriteLine(output);
process.WaitForExit();
process.Close();
Console.WriteLine("\n\nPress any key to exit.");
Console.ReadLine();
我想更改App1以发送对象而不是字符串。 该对象将是
class Message
{
string AMessage
bool IsItTrue
int MyFavoriteNumber
}
如何更改App1以发送自定义对象而不是字符串。然后,如何更改App2以读取自定义对象。
我也想避免Console。(任何东西)在可能的情况下发送消息
答案 0 :(得分:1)
看看提供的代码,我将假定这些应用程序是在彼此进程中运行的两个独立的控制台应用程序。
有几种建立交流的方式。我强烈建议您看一下the named pipes.,它们提供了一种很好的方法来精确地完成您想要的事情。
对您可能有用的另一种方法是使用队列。一个不错的库是RabbitMQ。
我认为您可以在Internet上找到足够的有关如何使用它们的示例,因此我们不必在此处编写它们。
至于如何发送对象而不是字符串?为此,您需要能够序列化该对象。一种常见的方式是去serialize it to XML或JSON。
希望这会有所帮助! 欢呼和快乐编码