gpt4 book ai didi

c# - Excel 在工作表中仍有事件的 RTD 公式时调用 IRTD.ServerTerminate

转载 作者:行者123 更新时间:2023-11-30 17:50:40 25 4
gpt4 key购买 nike

我有一个 C# RtdServer,它从 TCPListener 接收数据更新。它按预期运行,除了在某些时候它仍然有事件 RTD() 在工作表 ServerTerminate() 被调用时,我似乎无法弄清楚为什么。

我的理解是 ServerTerminate() 在以下情况下被调用:

  • 删除所有 rtd 公式
  • ServerStart() 不返回 1

excel 调用 ServerTerminate() 的其他原因是什么?

编辑:

下面是我如何设置HeartBeat机制:

public int ServerStart(IRTDUpdateEvent callback)
{
callback.HeartbeatInterval = 60000; // 1 min HB
_callback = callback;
// Other setup ...
return 1;
}

这是HeartBeat代码

public int Heartbeat()
{
_log.Info("HB called...");
return 1;
}

从上面看,我希望每 60 秒 (60Kms) 看到对 HeartBeat 的调用,但我没有看到任何记录。我很难过-有什么想法吗??

最佳答案

一段时间后,我发现如果 UI 线程压力过大,excel 将重启 com 服务器 (rtd)。

我能够通过积极使用键盘快捷键重现此“服务器重启”:shift+▲▼◀▼ 以在大量加载事件 RTD 的工作表中导航。虽然这不是强制 excel 重新启动服务器的可靠方法,但它的工作频率足以进行测试。您可以尝试通过执行以下操作来重现 com 服务器重启:

  • 将 50K+ 的 RTD 写到一张纸上
  • 开始从源头向您的 RTD 触发更新(数据吞吐量越高,excel 投降并重启 com 服务器的可能性就越大)
  • 设置 Application.RTD.ThrottleInterval = 0// ( update wheneverpossible )
  • 启动并运行时,使用键盘快捷键 (shift+▲▼◀▼)

这将可能导致 excel 重新启动 RTD,在这样做时,首先调用 ServerTerminate()(无论工作表中存在多少 RTD),然后调用ServerStart() 有效地重新启动服务器,这解释了所指出的行为。

服务器重启会重置 RTD 实现中的所有数据,因此您应将此视为完全重置,因此所有订阅也应重置。

嘘!

关于c# - Excel 在工作表中仍有事件的 RTD 公式时调用 IRTD.ServerTerminate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20510684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com