在VB6中,有一个名为LinkExecute女巫的表单事件,我可以使用它将两个项目链接在一起。例如,我用一个按钮创建项目A并将其链接到项目B,当我单击项目A上的按钮时,项目B中的文本框发生了更改。
为了简化这一想法,它将两个项目链接起来,并让其中一个项目侦听其他事件,当主项目上发生特定事件时,侦听器会在侦听器项目上本地触发一个事件。
这两个项目都是WinForms,并且运行在同一台机器上。
项目A
Private Sub Command1_Click()
On Error Resume Next
Text1.LinkTopic = "Project1|SYSTEM"
Text1.LinkItem = "TEXTSource"
Text1.LinkMode = vbLinkManual
Text1.LinkRequest ' "Hello World"
Text1.LinkExecute "Hello World"
DoEvents
End Sub
Public Sub Form_Load()
End Sub项目B
Private Sub Command1_Click()
Label1.Caption = Val(Label1.Caption) + 1
End Sub
Private Sub Form_LinkClose()
List1.AddItem "Form_LinkClose"
Command1_Click
End Sub
Private Sub Form_LinkError(LinkErr As Integer)
List1.AddItem "form_LinkError"
Command1_Click
End Sub
Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
List1.AddItem "Command " & CmdStr & " has been received"
Cancel = False
Command1_Click
End Sub
Private Sub Form_LinkOpen(Cancel As Integer)
List1.AddItem "Form_LinkOpen"
Cancel = False
Command1_Click
End Sub
Private Sub Form_Load()
List1.Clear
Command1_Click
End Sub
Private Sub PictureSource_LinkClose()
List1.AddItem "PictureSource LinkClose"
Command1_Click
End Sub
Private Sub PictureSource_LinkError(LinkErr As Integer)
List1.AddItem "PictureSource LinkError: Error = " & LinkErr
Command1_Click
End Sub
Private Sub PictureSource_LinkNotify()
List1.AddItem "PictureSource LinkNotify"
Command1_Click
End Sub
Private Sub PictureSource_LinkOpen(Cancel As Integer)
List1.AddItem "PictureSource LinkOpen"
Command1_Click
End Sub那么,LinkExecute在C#中的等效性是什么,或者如何在C#中实现相同的功能呢?
发布于 2016-10-31 03:44:48
DDE是一种较旧的进程间通信协议,它严重依赖于在应用程序之间来回传递windows消息。其他更现代、更健壮的进程间通信技术(如进程间通信 )是可用的,为了让两个项目交换事件,它们必须就这些事件的通信方式达成一致。这样做有很多不同的方法,具体使用哪种方法可能取决于体系结构和上下文。
您还可以查找一些常用的技术,如文件(从公共文件中读取)、命名管道、队列(MSMQ)、使用TCP/UDP套接字连接、使用WebServices、WCF或Restful、远程过程调用(RPC)、从数据库中的公共条目读取。(不推荐),窗口消息和共享内存。当您自己实现这两个应用程序时,您可以选择使用您喜欢的任何IPC方法。网络套接字和基于更高级套接字的协议,如HTTP、XML和SOAP,因为它们允许您在不同的物理机器上运行应用程序。
我更喜欢使用MSMQ,因为它将保留在不同机器中拥有进程的能力。
编辑
答案的参考文献取自侦听另一个应用程序中的事件,向两个正在运行的应用程序发送/接收消息和NDde: CodePlex。
https://stackoverflow.com/questions/40336116
复制相似问题