我正在按照Don Syme建议的方法在这里引发一个事件并在GUI中处理它。我已按如下方式创建了我的活动
let progressReport = new Event<int>()
并已将其暴露如下
[<CLIEvent>]
member this.ReportProgress = progressReport.Publish
在我的 VB.net 代码中,我可以看到事件,甚至可以响应它。但是,只有忽略 int 参数,我才能响应它。我的代码有效
Private Sub test() Handles calcAgent.ReportProgress
prog.Value += 1
End Sub
如果我尝试将其更改为
Private Sub test(i As int) Handles calcAgent.ReportProgress
prog.Value += 1
End Sub
它不会编译并给出"方法'测试'无法处理'报告进度'的原因,因为它们没有兼容的签名。
类型FSharp.Control.FSharpHandler<'T>
的签名为 sender:obj * args:'T -> unit
,这意味着附加到它的委托必须有两个参数 - sender:obj
和 args:'T
。
在您的情况下,'T
是int
,因此您的处理程序应该是:
Private Sub test(sender As Object, i As int) Handles calcAgent.ReportProgress
prog.Value += 1
End Sub