2016-10-31 56 views
-1

在VB6中有一个叫巫LinkExecute我可以用丝束项目链接起来形成该事件。例如,当我点击项目A上的按钮时,项目B中的文本框发生更改,我使用按钮创建项目A并将其与项目B相链接。VB6 LinkExecute相当于在C#

为了简化知道它链接丝束项目,并让其中一人听其他事件,并在特定事件发生在主体工程监听器监听本地项目触发事件。

两个项目都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#中的一样吗?

+1

有什么问题,采取了?显示一些代码将有助于 –

+0

哦^^什么是相当于LinkExecute在C#或我怎么可以在c#中做同样的事情 我没有关于vb6的想法,但我的同事在vb6中显示我的例子我明天问他代码 – AnAs51993

+0

我添加代码示例 – AnAs51993

回答

2

DDE是在很大程度上依赖于通过窗口消息来回应用程序之间的进程间较旧的通信协议。其他的,更现代和强大,进程间通信技术可像Inter-process communication为了两个项目交换事件,必须对这些事件是如何沟通达成一致。有很多不同的方法可以做到这一点,而使用哪种方法可能取决于体系结构和上下文。

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

我宁愿使用MSMQ,因为它会保留其进程在不同的机器上的能力

  1. MSMQ允许你不要失去消息(如果接收器被关闭)
  2. MSMQ可以让你有在同一台机器上或者在不同的机器
  3. Windows服务流程给你启动的能力/停止 过程容易
  4. Windows服务可以监视我的我的SNMP和一般他们诠释轻松使用Windows管理工具。

编辑

的答案的参考已从Listen for events in another applicationSend/Receive message To/From two running applicationNDde: CodePlex

+0

我知道上面提到的一些方法,但是我对LinkExecute的兴趣在于,您不需要设置定时器来连续读取公用文件或db字段或任何中间通信方法 只要拖曳项目运行一起沟通是在 – AnAs51993

+0

我没有downvote你。是我吗?因为它不显示我一个橙色箭头? 我红色的链接关于FileSystemWatcher,它实际上让我感兴趣,我现在正在阅读和搜索它感谢它,当我完成搜索和收集有关它的信息时,我投你一票,当我关闭问题,谢谢你的帮助。 – AnAs51993