如何赋予事件处理程序访问成员数据的权限?

时间:2012-06-18 15:52:47

标签: c++ .net delegates

         myWebClient->DownloadProgressChanged += gcnew DownloadProgressChangedEventHandler( &Form1::DownloadProgressCallback );

给出错误:

  

1>。\ Form1.cpp(26):错误C3352:'void Form1 :: DownloadProgressCallback(System :: Object ^,System :: Net :: DownloadProgressChangedEventArgs ^)':指定的函数与委托类型不匹配'void(System :: Object ^,System :: Net :: DownloadProgressChangedEventArgs ^)'

文档使用静态非成员函数作为此委托参数,但我想更新Form1类的进度条成员。我在这里做错了什么?

我使用的是.NET 2.0,所以请尽量将语言保留为反对。

2 个答案:

答案 0 :(得分:2)

成员函数的委托将被声明(在表单中):

 myWebClient->DownloadProgressChanged += gcnew DownloadProgressChangedEventHandler(this,  &Form1::DownloadProgressCallback );

基本上,第一个参数是定义成员函数的对象。在这种情况下,this应该有效。

答案 1 :(得分:1)

将对象传递给委托构造函数。

gcnew DownloadProgressChangedEventHandler( this, &Form1::DownloadProgressCallback );