从VB.Net获取C#DLL事件

时间:2011-03-01 21:14:52

标签: vb.net events

我希望能够访问C#DLL中的事件,以便我可以将进度条显示为 执行文件分析 - DLL由第三方使用VB.Net编写。

详细

C#FileAnaysis.DLL

包含一个包含2个公共子

的公共类FileManager
public void ProgAnalysis(string fileName) 

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

如何访问Vb.Net中第二个子生成的事件?

2 个答案:

答案 0 :(得分:1)

您需要传递与这些代理匹配的方法。如果我不得不猜测我会说它在幕后使用BackgroundWorker

所以你可以这样做。

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

只是猜测委托签名。当然,您可以使用lambda或单独的方法而不是匿名委托,具体取决于您需要做什么。

该库是用VB.NET编写的。

答案 1 :(得分:1)

考虑到该方法接受ProgressChangedEventHandlerRunWorkerCompletedEventHandler,我会打赌你使用这些类型的委托并将它们传递给方法;那么它会在适当的时候给他们打电话。

例如,以下方法匹配这些委托类型的签名:

' 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)