2016-10-31 4 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

oh ^^ что эквивалентно LinkExecute на C# или как я могу сделать то же самое в C# У меня нет идеи о vb6, но мой коллега показал мне пример в vb6. Я хорошо спрошу его завтра. – AnAs51993

+0

I добавленный образец кода – AnAs51993

ответ

2

DDE - это старый протокол связи между процессами, который в значительной степени зависит от передачи сообщений Windows между приложениями. Другие, более современные и надежные методы для межпроцессного общения доступны как Inter-process communication Для того, чтобы два проекта могли обмениваться событиями, они должны договориться о том, как эти события передаются. Существует много разных способов сделать это, и точно, какой метод использовать может зависеть от архитектуры и контекста.

Вы также можете посмотреть на некоторые из наиболее распространенных методов, используемых как files(Reading from a common file), Named Pipes, Queues (MSMQ), использование TCP/UDP соединение сокет, использование веб-сервисов, WCF или веб-службы RESTful, Remote Procedure Calls (RPC), Чтение из общей записи в БД. (Не рекомендуется), window messages и shared memory. Когда вы сами внедряете оба приложения, вы можете выбрать любой метод IPC, который вы предпочитаете. Сетевые сокеты и высокоуровневые протоколы на основе сокетов, такие как HTTP, XML-RPC и SOAP, поскольку они позволяют запускать приложения на разных физических машинах.

Я предпочел бы использовать MSMQ как это позволило бы сохранить возможность иметь процессов в различных машинах

  1. MSMQ позволяет не потерять сообщения (в случае, если RECEIVER вниз)
  2. MSMQ позволяет иметь процессы в той же машине или на различных машинах
  3. службы
  4. Windows, даст вам возможность запускать/останавливать процессы легко
  5. служба Windows, может меня контролировать мой SNMP и в целом они Int легко справляться с инструментами администрирования Windows.

Редактировать

Эталон ответа были взяты из Listen for events in another application, Send/Receive message To/From two running application и NDde: CodePlex

+0

Мне известны некоторые из описанных выше методов, но интерес к мне в LinkExecute заключается в том, что вам не нужно устанавливать таймер для непрерывного чтения общего файла или поля db или какого-либо среднего метода связи до тех пор, пока выполняются проекты буксировки вместе сообщение находится на – AnAs51993

+0

Я не спустил вас вниз. Был ли это я?? потому что это не показывает мне оранжевую стрелу? Я красну ссылку на FileSystemWatcher, и это меня интересует на самом деле, и я читаю и ищу об этом сейчас благодаря этому, я хорошо проголосую за вас, когда я закончил поиск и сбор информации об этом, как правило, я голосую за ответы, когда я закрываю вопрос, спасибо за помощь. – AnAs51993