C6中的VB6 LinkExecute等效于C#

时间:2016-10-31 03:17:08

标签: c# vb6

在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#中做同样的事情呢?

1 个答案:

答案 0 :(得分:2)

DDE是一种较旧的进程间通信协议,它在很大程度上依赖于在应用程序之间来回传递Windows消息。其他更现代,更强大的进程间通信技术可用于Inter-process communication为了让两个项目交换事件,他们必须就如何传达这些事件达成一致。有许多不同的方法可以做到这一点,确切地说使用哪种方法可能取决于架构和上下文。

您还可以查找一些常用技术,如files(Reading from a common file)Named PipesQueues (MSMQ),使用TCP / UDP套接字连接,使用Web服务,WCF或Restful Web服务,{ {3}},从数据库中的公共条目读取。 (不推荐),Remote Procedure Calls (RPC)window messages。当您自己实现这两个应用程序时,您可以选择使用您喜欢的任何IPC方法。网络套接字和更高级别的基于套接字的协议,如HTTP,XML-RPC和SOAP,因为它们允许您在不同的物理机器上运行应用程序。

我更喜欢使用MSMQ,因为它可以保留在不同机器中使用进程的能力

  1. MSMQ允许您不丢失消息(如果RECEIVER已关闭)
  2. MSMQ允许您在同一台机器或不同的机器上进行处理 机器
  3. Windows服务使您能够启动/停止 很容易处理
  4. Windows服务可以监控我的SNMP,通常它们可以轻松地与Windows管理工具集成。
  5. 修改

    答案的参考资料来自shared memoryListen for events in another applicationSend/Receive message To/From two running application