我有现有的VB GUI代码,我正在尝试与一些C#代码交互,但无法解决如何将EventHandler传递给VB.NET。
C#签名是:
public void SendLatestImages(Guid PatientID, Guid ToPracticeID, EventHandler<ProgressChangedEventArgs> progressChangedHandler)
{
...
}
在VB中,当我尝试使用它时,我有
sendImages.SendLatestImages(arg.PatientID, arg.ToPracticeID, ProgressStream_ProgressChanged)
到目前为止一切顺利。但是在ProgressStream_ProgressChanged函数中我只得到:
Private Function ProgressStream_ProgressChanged() As EventHandler(Of SLSyncClient.ProgressChangedEventArgs)
End Function
...无法访问我所追求的实际ProgressChangedEventArgs。在C#中,最后一个函数的签名是
private void ProgressStream_ProgressChanged(object sender, ProgressChangedEventArgs e)
...这给了我作为e的args。 我在这里缺少什么?
答案 0 :(得分:2)
您的问题是ProgressStream_ProgressChanged
是返回事件处理程序的方法,而不是事件处理程序本身的方法。你的代码所做的是它调用 ProgressStream_ProgressChanged
(在VB中你不需要括号)并将其结果传递给SendLatestImages
。
您要做的是将ProgressStream_ProgressChanged
变为Sub
匹配 EventHandler
委托(而非Function
返回Private Sub ProgressStream_ProgressChanged(sender As Object, args As ProgressChangedEventArgs)
End Sub
它):
AddressOf
然后你可以使用sendImages.SendLatestImages(arg.PatientID, arg.ToPracticeID, AddressOf ProgressStream_ProgressChanged)
创建一个委托(在C#中你不需要任何操作符,在VB中你可以):
{{1}}