2016-09-21 3 views
2

У меня есть библиотека # класса F, как, например:Обратный вызов из C# в F #

namespace FsharpTestSystem 

open System 
open System.IO 

open TCLoggerEntity 
open TCIQuoteEntity 

type TestCallback() = 
    member this.LoggerOutput() = Logger.Info("F#") 
    member this.OnQuote(q : TCQuote) = Console.WriteLine(q.ToString()) 

Добавление ссылки этого F # сборки в C# проекта, я испытал, что я могу назвать LoggerOutput штраф от C#. Однако, если я пытаюсь иметь C# событие обратного вызова выполняются в F # Я получаю ошибку на линии ниже:

От C#:

using FsharpTestSystem; 

public delegate void QuoteChangeEvent(TCQuote q); 
event QuoteChangeEvent OnQuoteChange; 

TestCallback fsts = new TestCallback(); 
api.MAPI.OnQuoteChange += fsts.OnQuote(); // this doesn't work 

fsts.LoggerOutput(); // This works fine 

ответ

5

вы активизируете свой метод, который бы попробовать и использовать любые OnQuote возвращенное как обработчик события.

OnQuote является обработчик события, так что попробуйте: -

api.MAPI.OnQuoteChange += fsts.OnQuote; 
+0

Я поклялся, что пытался. Хорошо, спасибо. – Ivan

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