Visual Basic .NET/进程间通信
外观
通常,Windows 中的每个程序都有其自己的虚拟内存空间。换句话说,一个程序无法更改另一个程序中的变量。编组是将数据和内存地址在应用程序之间传递的过程。不同的程序可以通过几种方式相互通信。
这是一个“自行解决”方案。两个应用程序都访问共享目录中的文件,从它们读取和写入数据以进行通信。最简单的方法是发送应用程序为每条消息写入一个单独的文件,接收应用程序在处理完这些文件后将其删除。发送应用程序应以独占访问权限创建文件,以便接收应用程序无法访问半写入的文件。还应该有一种机制来重新同步,如果一个或另一个应用程序在对话期间关闭。
这种方法的主要缺点是接收应用程序必须定期轮询共享目录(例如,通过使用 Timer 控件)。这会产生硬盘/网络流量,并且轮询间隔会限制对话的响应速度。
这种方法包括重写 Form 中的 WndProc 方法以接收,以及 PostMessage Win32 API 调用以发送自定义 Windows 消息。
这种方法的优势在于它可以轻松地适应同一台计算机上的程序之间的通信,以及同一网络(甚至跨互联网)中不同计算机上的程序之间的通信。它使用 System.Runtime.Remoting 命名空间,你可以通过项目引用添加它。
这些方法现在不常使用,但如果你试图与旧应用程序通信,你可能会遇到它们。
动态数据交换是 Windows 用于程序相互通信的原始方法。它仍然被 Windows 用于“剪切和粘贴”。
对象链接与嵌入
通用对象模型.
- 引用计数
- 通过 IDispatch 进行后期绑定
OLE 自动化
ActiveX EXEs 和 DLLs