Получение событий C # DLL из VB.Net - PullRequest
0 голосов
/ 02 марта 2011

Я хотел бы иметь возможность доступа к событиям в C # DLL, чтобы я мог отображать индикатор выполнения во время анализа файла - DLL пишется третьей стороной с использованием VB.Net.

Подробности

C # FileAnaysis.DLL

Содержит открытый класс FileManager, который содержит 2 открытых подпрограммы

public void ProgAnalysis(string fileName) 

public void ProgAnalysis(string fileName, ProgressChangedEventHandler progressChangedEventHandler, RunWorkerCompletedEventHandler runWorkerCompletedEventHandler) 

Как получить доступ к событиям, генерируемым вторым подпрограммой в Vb.Net?

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Учитывая, что метод принимает ProgressChangedEventHandler и RunWorkerCompletedEventHandler, я бы поспорил, что вы используете делегатов этих типов и передадите их методу;затем он будет вызывать их в соответствующих точках.

Например, следующие методы соответствуют сигнатурам этих типов делегатов:

' Matches ProgressChangedEventHandler '
Sub OnProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs)
    ' Do something. '
End Sub

' Matches RunWorkerCompletedEventHandler '
Sub OnRunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
    ' Do someting. '
End Sub

Учитывая приведенные выше методы, вы можете передать их ProgAnalysis как это:

ProgAnalysis("fileName", _
             AddressOf OnProgressChanged, _
             AddressOf OnRunWorkerCompleted)
1 голос
/ 02 марта 2011

Вам необходимо передать методы, соответствующие этим делегатам. Если бы мне пришлось угадывать, я бы сказал, что он использует BackgroundWorker за кулисами.

Так что вы могли бы сделать что-то вроде этого.

void Main {
     ProgAnalysis(@"c:\test.txt", 
         delegate(object sender, ProgressChangedEventArgs e) {
             // Do something
         },
         delegate(object sender, RunWorkerCompletedEventArgs e) {
             // Do something else
         });
}

Просто гадать о подписи делегата. Конечно, вы можете использовать лямбда-выражения или отдельные методы вместо анонимных делегатов, в зависимости от того, что именно вам нужно делать.

Неважно, что библиотека была написана на VB.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...