gpt4 book ai didi

c# - BeginInvoke、EndInvoke 的多线程问题?

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:25 26 4
gpt4 key购买 nike

我有一个显示实时值的客户端应用程序。这些值通过 DDE-Advise 提供。这些实时值是数控机床的移动轴。因此,通过此 DdeClientAdvise-Method,每分钟大约有 100 个建议。
当应用程序收到许多 DDE-Advise 时,似乎突然间所有的 adivses 都丢失了。
我将问题简化为以下内容:

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 吗?

关于c# - BeginInvoke、EndInvoke 的多线程问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6706871/

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