我有一个客户端应用程序,它显示实时值。这些值通过DDE-Advise提供。这些实时值是cnc机器的移动轴。因此,通过这种DdeClientAdvise
方法,每分钟大约有100条建议。
当应用程序获得许多DDE-Advises时,似乎突然失去了所有单元。
我将问题简化为以下几点:
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在做什么?
编辑:添加有关该类的更多信息。
最佳答案
您不必在DdeClientAdviseCallback内部调用EndInvoke
吗?