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

时间:2013-06-12 19:08:24

标签: c# c++-cli

在我的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 Events

在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));

1 个答案:

答案 0 :(得分:2)

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

oM.E += this.ProgressBarChanged;

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