2011-03-01 46 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