2011-03-01 27 views
0

我想能够访问C#DLL中的事件,因此我可以显示进度条,因为执行了 文件分析 - 该DLL由第三方写入使用VB.Net。从VB.Net获取C#DLL事件

详细

C#FileAnaysis.DLL

包含公用类文件管理器包含2级公共潜艇

public void ProgAnalysis(string fileName) 

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

我如何访问Vb.Net由第二副生成的事件?

+0

通过产生什么事件第二个子? – Oded 2011-03-01 21:19:30

回答

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

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

所以你可以做这样的事情。

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

只是猜测委托签名。当然,您可以使用lambdas或单独的方法而不是匿名代理,具体取决于您需要执行的操作。

这个库在VB.NET中编写并不重要。

+0

措辞很混乱,但我认为OP说DLL是用C#编写的,而他想在VB.NET中访问它。 – 2011-03-01 21:30:25

+0

@丹涛,你可能是对的。如果是这样,你的榜样是要走的路。 – 2011-03-01 21:32:39