在VB6中有一个名为LinkExecute
的Form事件,我可以用来将两个项目链接在一起。例如,我使用按钮创建项目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
那么在C#中等同于LinkExecute
的是什么,或者我如何在C#中做同样的事情呢?
答案 0 :(得分:2)
DDE是一种较旧的进程间通信协议,它在很大程度上依赖于在应用程序之间来回传递Windows消息。其他更现代,更强大的进程间通信技术可用于Inter-process communication为了让两个项目交换事件,他们必须就如何传达这些事件达成一致。有许多不同的方法可以做到这一点,确切地说使用哪种方法可能取决于架构和上下文。
您还可以查找一些常用技术,如files(Reading from a common file),Named Pipes,Queues (MSMQ),使用TCP / UDP套接字连接,使用Web服务,WCF或Restful Web服务,{ {3}},从数据库中的公共条目读取。 (不推荐),Remote Procedure Calls (RPC)和window messages。当您自己实现这两个应用程序时,您可以选择使用您喜欢的任何IPC方法。网络套接字和更高级别的基于套接字的协议,如HTTP,XML-RPC和SOAP,因为它们允许您在不同的物理机器上运行应用程序。
我更喜欢使用MSMQ,因为它可以保留在不同机器中使用进程的能力
修改强>
答案的参考资料来自shared memory,Listen for events in another application和Send/Receive message To/From two running application