在c++/cli DLL中引发事件,并在c#中使用
本文关键字:并在 事件 c++ cli DLL | 更新日期: 2023-09-27 18:18:01
在我的c#应用程序,我有一个进度条。c#应用程序正在调用c++/cli dll,该dll处理许多文件。由于每个文件都在dll中处理,我想跟踪它在c#应用程序中的进度。为此,我需要在c++/cli中引发一个事件,并在c#中使用它。从MSDN我收集我需要在我的c++/cli类如下:
delegate void Del(int);
event Del^ E;
void fire(int i) {
E(i);
}
MSDN事件在MSDN中,事件的接收者位于同一个c++/cli项目中,并显示了如何引发事件。在我的项目中,c#应用程序是接收在处理每个文件后应该在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;
至于触发事件,你这样做是正确的:只需像调用委托或方法一样调用事件,传递事件参数。