我有一个C#RtdServer
,可以从TCPListener
接收数据更新。它是按预期运行的,除非在某些点上它仍然在工作表RTD()
中仍然有活动的ServerTerminate()
被调用,我似乎无法找出原因。
我理解如果:{/ 1>被调用ServerTerminate()
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秒(60公里)看到HeartBeat
的电话,但我看不到记录这个。我很难过 - 任何想法?
答案 0 :(得分:1)
经过一段时间后,我发现如果UI线程严重不足,excel将重新启动一个com服务器(rtd)。
我能够通过积极使用键盘快捷键来重现这种“服务器重启”:shift+▲▼◀▼
在一个载有大量活动RTD的工作表中导航。虽然这不是强制excel重启服务器的可靠方法,但它的工作经常足以进行测试。您可以尝试通过执行以下操作重现com服务器重新启动:
Application.RTD.ThrottleInterval = 0//
(update whenever
possible)shift+▲▼◀▼
)这将可能导致excel重新启动RTD并且这样做,首先调用ServerTerminate()
(无论工作表中存在多少RTD)然后调用ServerStart()
有效地重启服务器,解释了所指出的行为。
服务器重启会重置RTD实现中的所有数据,因此您应将此视为完全重置,因此也应重置所有订阅。
H个!