我有一个显示实时值的客户端应用程序。这些值是通过 DDE-Advise 提供的。这些实时值是数控机床的移动轴。因此,每分钟大约有 100 条建议通过这种方法进入DdeClientAdvise
。
当应用程序获得许多 DDE 建议时,似乎突然所有建议都丢失了。
我将问题简化为以下内容:
public class NcddeZugriff
{
private DdeClient _ddeClient; //see http://ndde.codeplex.com/
public NcDdeZugriff()
{
_ddeClient = new DdeClient("ncdde", "machineswitch");
_ddeClient.Connect();
_ddeClient.Advise += DdeClientAdvise;
}
private delegate void CallbackDelegate(object sender, DdeAdviseEventArgs e);
private void DdeClientAdvise(object sender, DdeAdviseEventArgs e)
{
CallbackDelegate callbackDelegate = DdeClientAdviseCallback;
_logging.InfoFormat("Advise-Callback for {0}", e.Item);
//LINE A : return;
callbackDelegate.BeginInvoke(sender, e, callbackDelegate.EndInvoke, null);
}
private void DdeClientAdviseCallback(object sender, DdeAdviseEventArgs e)
{
_logging.InfoFormat("Asynchron for {0}", e.Item);
//do some work with e.Text...
}
}
如果我删除评论 LINE A,一切正常,没有任何建议丢失。所有的建议都被记录下来。
如果我启用 BeginInvoke,一段时间后DdeClientAdvise
-Method 不再被调用,不再有日志条目。
BeginInvoke,EndInvoke 我做错了什么?
编辑:添加更多关于课程的信息。