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

3

我有一些现有的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。

1个回答

2
你的问题在于ProgressStream_ProgressChanged是一个返回事件处理程序的方法,而不是事件处理程序本身。你的代码所做的是调用ProgressStream_ProgressChanged(在VB中不需要括号)并将其结果传递给SendLatestImages
你想要做的是将ProgressStream_ProgressChanged变成一个与EventHandler委托相匹配的Sub(而不是返回它的Function)。
Private Sub ProgressStream_ProgressChanged(sender As Object, args As ProgressChangedEventArgs)
End Sub

然后您可以使用 AddressOf 将其转换为委托(在 C# 中不需要任何运算符,在 VB 中需要):

sendImages.SendLatestImages(arg.PatientID, arg.ToPracticeID, AddressOf ProgressStream_ProgressChanged)

太好了,我漏掉了AddressOf。(我已经尝试了正确签名的子程序)。谢谢@svick。 - RichieRich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接