从c#到f#的回调

本文关键字:回调 | 更新日期: 2023-09-27 18:07:55

我有一个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#项目中,我已经测试了我可以从c#中调用LoggerOutput。但是,如果我尝试在f#中执行c#事件回调,我会在下面的行中得到一个错误: 从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

从c#到f#的回调

你正在调用你的方法,它将尝试使用任何OnQuote返回作为事件处理程序。

OnQuote是事件处理程序,所以试试:-

api.MAPI.OnQuoteChange += fsts.OnQuote;