2016-10-31 2 views
-1

In VB6 gibt es ein Formularereignis namens LinkExecute das ich verwenden kann, um zwei Projekte miteinander zu verknüpfen. Zum Beispiel erzeuge ich Projekt A mit einer Schaltfläche und verknüpfe es mit Projekt B, das eine Textbox hat, wenn ich auf die Schaltfläche auf Projekt A klicke, ändert sich die Textbox in Projekt B.VB6 LinkExecute äquivalent in C#

Um die Idee zu vereinfachen, verknüpfen Sie die Tow-Projekte und lassen eines von ihnen die anderen Ereignisse hören. Wenn ein bestimmtes Ereignis im Hauptprojekt auftritt, löst der Listener ein Ereignis lokal im Listener-Projekt aus.

Beide Projekte sind WinForms und werden auf demselben Computer ausgeführt.

Projekt 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 

Projekt 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 

Also, was ist das Äquivalent zu LinkExecute in C# oder wie kann ich das gleiche in C# zu tun?

+1

genommen worden Was ist die Frage? Zeige Code würde helfen –

+0

oh ^^ was ist das Äquivalent zu LinkExecute in C# oder wie kann ich das gleiche in C# Ich habe keine Ahnung über vb6, aber mein Kollege zeigen Sie mir Beispiel in vb6 Ich frage ihn für Code morgen – AnAs51993

+0

I Code-Beispiel – AnAs51993

Antwort

2

DDE ist ein älteres Interprozesskommunikationsprotokoll, das stark darauf angewiesen ist, Windows-Nachrichten zwischen Anwendungen hin- und herzuübertragen. Andere, modernere und robustere Techniken für die Interprozesskommunikation sind verfügbar wie Inter-process communication Damit zwei Projekte Ereignisse austauschen können, müssen sie sich darüber verständigen, wie diese Ereignisse kommuniziert werden. Es gibt viele verschiedene Möglichkeiten, dies zu tun, und genau welche Methode zu verwenden ist, hängt von der Architektur und dem Kontext ab. in einem db

Sie können auch für einige der häufigsten Techniken wie files(Reading from a common file) verwendet aussehen, Named Pipes, Queues (MSMQ), Nutzung TCP/UDP Socket-Verbindung, Verwenden WebServices, WCF oder Restful Web Service, Remote Procedure Calls (RPC), von einem gemeinsamen Eintrag lesen. (Nicht empfohlen), window messages und shared memory. Da Sie beide Anwendungen selbst implementieren, können Sie jede beliebige IPC-Methode verwenden. Netzwerk-Sockets und übergeordnete Socket-basierte Protokolle wie HTTP, XML-RPC und SOAP, da sie die Anwendungen auch auf verschiedenen physischen Maschinen ausführen können.

ich MSMQ verwenden würde es vorziehen, da sie die Fähigkeit, die Prozesse in verschiedenen Maschinen

  1. MSMQ ermöglicht bewahren würden Sie keine Nachrichten zu verlieren (falls EMPFÄNGER nach unten ist)
  2. MSMQ Sie haben können Prozesse in derselben Maschine oder in verschiedenen Maschinen
  3. Windows-Dienst geben Ihnen die Möglichkeit
  4. Windows-Dienst kann ich meine SNMP leicht
  5. die Prozesse zu starten/stoppen überwacht und sie in der Regel int egrate leicht mit Windows-Admin-Tools.

bearbeiten

Die Referenz für die Antwort wurde von Listen for events in another application, Send/Receive message To/From two running application und NDde: CodePlex

+0

Ich kenne einige der oben erwähnten Methoden, aber was mich an LinkExecute interessiert, ist, dass Sie den Timer nicht so einstellen müssen, dass er kontinuierlich ein gemeinsames Datei- oder Datenbankfeld oder eine mittlere Kommunikationsmethode liest, solange das Projekt läuft zusammen ist die Kommunikation auf – AnAs51993

+0

Ich habe dich nicht downvote. war ich es?? weil es mir keinen orangefarbenen Pfeil zeigt ?? Ich habe den Link über FileSystemWatcher gelüftet und es interessiert mich eigentlich und ich lese und suche es jetzt Danke dafür, ich stimme euch gut ab, wenn ich mit der Suche und dem Sammeln von Informationen darüber fertig bin, normalerweise stimme ich für Antworten wenn ich das schließe Frage, danke für deine Hilfe. – AnAs51993