Open ahjszll opened 3 years ago
请问你这个问题是什么条件下触发的?比如修改或加了什么代码? 我这边本地在 win10 的环境下未复现这个问题。
我是在winform下使用,所以删除了源代码中 [MonoPInvokeCallback(typeof(EngineEventOnLocalInvitationAcceptedHandler))]类似的特性,同时移除Unity等命名空间,回调方法也不再加入队列了,而是直接执行。不知道这些改动是否有影响?
嗯, winform 环境与 Unity 环境,C# 与 C++ 交互这块特性确实可能存在一些不一样的地方。
发送消息和接收消息时,一段时候后,报错(环境 win10 winform .net 4.5):
托管调试助手 "CallbackOnCollectedDelegate":“对“BoradLib!BoradLib.其他.Agora.agora_rtm.IRtmApiNative+EngineEventOnMessageReceived::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。”
通过手动GC,可快速还原问题
修改方案
private static void OnMessageReceivedCallback(int id, string userId, IntPtr messagePtr) { ..... }
改为private static EngineEventOnMessageReceived OnMessageReceivedCallback => (id, userId, messagePtr) => { ... };
后工作正常.