若是在 WPF 须要用多进程通讯,一个推荐的方法是 WCF ,由于 WCF 是 RPC 计算。先来说下 RPC (Remote Procedure Call) 远程过程调用,他是经过特定协议,包括 tcp 、http 等对其余进程进行调用的技术。详细请看百度php
如今不会告诉你们如何使用 WCF ,下面讲的是使用 remoting 这个方法。须要知道 dotnet remoting 是已通过时的技术,建议使用 wcf 可是 wcf 部署难度比较高,对于性能要求比较高或想快速使用,建议使用 remoting 。使用方法很简单html
若是不想知道具体是怎么作,只想使用,那么请看WPF 封装 dotnet remoting 调用其余进程,欢迎加入dotnet 职业学院任何问题均可以在群里交流git
首先建立三个工程,一个工程放其余两个须要使用的库,一个是服务端,一个是客户端。其中客户端就能够调用服务端,客户端和服务端是两个不一样的进程,因此能够跨进程调用。tcp
先建立一个简单的工程,库的工程 RemoteObject ,里面只有一个类函数
public class RemoteCalculator : MarshalByRefObject { public const int Port = 13570; public int Add(int a, int b) { return a + b; } }
注意这个类须要继承 MarshalByRefObject ,这个类是在两个进程引用,客户端不实现这个类,因此客户端使用这个类接口一样能够。具体调用这个类的方法在服务端运行,结果经过 tcp 或 http 返回。post
客户端的主要代码是链接服务端,而后访问库的 add 函数,可是这个函数不在客户端运行,经过 tcp 调用服务端,让他运行。性能
private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { if (_channel == null) { Process.Start("CalcnsMnlhzydYeuiitcCddhxvlhm.exe"); _channel = new TcpChannel(); ChannelServices.RegisterChannel(_channel, true); } var calculator = (RemoteCalculator) Activator.GetObject(typeof(RemoteCalculator), "tcp://" + "127.0.0.1" + ":" + RemoteCalculator.Port + "/RemoteCalculator"); Console.WriteLine(calculator.Add(1, 2)); }
服务端的名称是 CalcnsMnlhzydYeuiitcCddhxvlhm ,主要是打开链接,执行客户端发过来的函数ui
static void Main(string[] args) { new Thread(() => { _channel = new TcpChannel(RemoteCalculator.Port); ChannelServices.RegisterChannel(_channel, true); RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteCalculator), "RemoteCalculator", WellKnownObjectMode.Singleton); }).Start(); while (true) { Console.ReadKey(); } } private static TcpChannel _channel;
须要注意,客户端点击按钮须要先打开服务端,使用这个代码Process.Start("CalcnsMnlhzydYeuiitcCddhxvlhm.exe");
而后建立 tcp 告诉经过tcp和服务端链接。而后从服务端得到 calculator 这个类,实际这个类如今是没有实现,调用函数须要发送到服务端。.net
服务端须要打开 TcpChannel ,这时须要定义调用的类,RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteCalculator), "RemoteCalculator", WellKnownObjectMode.Singleton);
,这个函数的一个参数就是注册的类,第二个函数是调用的这个类使用什么名称,通常都是使用类的名称,最后一个参数能够在一个链接给一个实例。因此在库的类不能在构造函数须要传入code
客户端调用的"tcp://" + "127.0.0.1" + ":" + RemoteCalculator.Port + "/RemoteCalculator"
最后一个RemoteCalculator
就是服务端注册的第二个函数。
那么这个功能的做用是什么?由于 x64 程序不能调用 x86 的库,因此能够用这个方法在 x64 的程序调用其余平台的库,由于进程运行的平台不同,可是通讯是相同。
其余的功能我没有使用,我就使用打开服务,调用他的函数,因此若是你们遇到问题,不要来问我。若是按照个人代码没法运行,能够发邮件给我,我发源代码给你
代码下载:网盘
更多关于 WPF dotnet remoting RPC 的博客请看
若是不想知道那么多,想要快速开始,请看
我搭建了本身的博客 https://lindexi.gitee.io/ 欢迎你们访问,里面有不少新的博客。只有在我看到博客写成熟以后才会放在csdn或博客园,可是一旦发布了就再也不更新
若是在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎你们加入
本做品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、从新发布,但务必保留文章署名林德熙(包含连接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的做品务必以相同的许可发布。若有任何疑问,请与我联系。