向已运行的WPF进程发送消息

时间:2019-04-18 14:57:24

标签: c# .net wpf

我在C#中都有WPF和Winform应用程序。我通过使用

从winform应用程序调用wpf应用程序
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"C:\wpfapp.exe";
startInfo.Arguments = data; //string result data from webservice;
Process.Start(startInfo);

这没关系,我能够使用已作为参数发送的参数从winform运行wpf ui。但是现在我有一个问题。现在我想在正在运行的wpf窗口中更新消息。

已经运行了wpf窗口并显示了消息。稍后我想向同一WPF窗口发送另一条消息。 我们如何实现这一目标?

if (ProgramIsRunning(exepath))
{
    // here we need to add the code to send message to the same wpf window.
}
else
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = @"C:\wpfapp.exe";
    startInfo.Arguments = data; // string result data from webservice;
    Process.Start(startInfo);
}

请帮助。

1 个答案:

答案 0 :(得分:0)

如果您不喜欢本post中所述的管道,则可以在WPF应用中使用Nancy托管简单的REST服务器,并使用HttpClient或{{3} }与之通信。

示例消息侦听器应用程序:

class Program {
    static void Main(string[] args) {
        var baseUri = new Uri("http://localhost:1234");
        var nancyHost = new NancyHost(baseUri);
        nancyHost.Start();

        Thread.Sleep(-1);
    }
}
public class SimpleRestModule : NancyModule {
    public SimpleRestModule() {
        Get["/Message"] = (args) => {
            return "Hello from server";
        };

        Post["/Message"] = (args) => {
            var receivedMessage = Request.Body.AsString();
            return "Message received";
        };
    }
}

示例邮件发送者应用程序:

class Program {
    static void Main(string[] args) {
        var httpClient = new HttpClient();

        var response = httpClient.PostAsync("http://localhost:1234/Message", new StringContent("Test message")).Result;
    }
}