将EventHandler作为参数从C#传递给VB.NET

时间:2013-06-16 00:16:24

标签: c# vb.net event-handling

我有现有的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。 我在这里缺少什么?

1 个答案:

答案 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}}