我有一个客户端应用程序,它显示实时值。这些值通过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吗?

10-08 00:38