在c ++ / cli dll中引发事件并在c#中使用

在我的c#app中,我有一个进度条。 C#app正在调用一个处理大量文件的c ++ / cli dll。 当在dll中处理每个文件时,我想跟踪它在c#app中的进度。 为此我需要在c ++ / cli中引发一个事件并在C#中使用它。 从MSDN我收集我需要在我的c ++ / cli类中:

delegate void Del(int); event Del^ E; void fire(int i) { E(i); } 

MSDN活动

在MSDN中,事件的接收者位于相同的c ++ / cli项目中,并显示如何引发事件。 在我的项目中,c#app将接收在处理每个文件后应在c ++ / cli中引发的事件。 我也搜索了很多,但还没弄清楚。 所以,我的问题是,如何在c ++ / cli中引发此事件,以及如何将c#程序连接到它? 一些代码显示了这样做的方式将非常感激。 谢谢!

马特,谢谢你的回应。 在C#我正在尝试

 MW.Class1 oM = new MW.Class1(); oM.fire += ProgressBarChanged(int i); 

它不能编译说不能分配因为fire是一个方法组。 我也有我的C#程序,处理程序

 public void ProgressBarChanged(int i ) { } 

虽然编译器说int不是预期的并且不编译,但这样做更好

 oM.fire += new EventHandler(ProgressBarChanged(int i)); 

正如错误消息所示, fire是一种方法,而不是一种事件。 在事件上调用+= ,并在引用事件处理程序方法时不使用()

 oM.E += this.ProgressBarChanged; 

至于触发事件,你正确地做到了:只需像委托或方法一样调用你的事件,传递事件参数。