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 的参数。我在这里想念什么?

4

1 回答 1

2

您的问题是这ProgressStream_ProgressChanged是一个返回事件处理程序的方法,而不是事件处理程序本身的方法。您的代码所做的是它调用 ProgressStream_ProgressChanged(在 VB 中不需要括号)并将其结果传递给SendLatestImages.

您要做的是制作与委托匹配ProgressStream_ProgressChangeda (而不是返回它的 a ):SubEventHandlerFunction

Private Sub ProgressStream_ProgressChanged(sender As Object, args As ProgressChangedEventArgs)
End Sub

然后你可以用AddressOf它来创建一个委托(在 C# 中你不需要任何操作符,在 VB 中你需要):

sendImages.SendLatestImages(arg.PatientID, arg.ToPracticeID, AddressOf ProgressStream_ProgressChanged)
于 2013-06-16T00:39:03.453 回答