2016-03-11 2 views
0

Я следую методу, предложенному доном Симе над here, чтобы поднять событие и обработать его в графическом интерфейсе. я создал свое событие следующим образомКак я могу обрабатывать события F # в VB.Net?

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 

он не будет компилировать и дает основание «„тест“метод не может справиться с„ReportProgress“, потому что у них нет совместимая подпись ".

+0

При наведении на 'calcAgent.ReportProgress', какой тип это говорит? –

+0

Event.calculationAgent.ReportProgress Как Microsoft.FSharp.Control.FSharpHandler (Of Integer) –

ответ

1

Тип FSharp.Control.FSharpHandler<'T>has the signature из 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 
+0

Я собирался ответить «Я пробовал это, не работает», но потом я подумал, что лучше убедиться, что я скопировал ваш код, а затем это сработало! Не знаю, что я пытался раньше, но ясно, что это было не так. Благодаря! –

Смежные вопросы