- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个显示实时值的客户端应用程序。这些值通过 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/
在网页上,我调用不允许我以编程方式设置超时的第三方。我调用 BeginInvoke 并使用 AsyncWaitHandle.WaitOne 等待指定的时间量。 如果调用超时,我会继续并忘记我开始的线程
一个异步问题: 我在互联网上阅读了大量支持和反对 Delegate.EndInvoke() 可选的文章。这些文章大多数都是 4-5 年前的文章。很多死链接。 任何人都可以解释一下,在 .NET 2.0
我有一个正常的方法 public List FindNearByCity(string targetCity) { // ... some implementation } 我想为这个方法添加异步支持
我不会做很多 Windows GUI 编程,所以对于比我更熟悉 WinForms 的人来说,这可能都是常识。不幸的是,我今天在调试期间遇到了任何资源来解释这个问题。 如果我们在异步委托(delegat
我读过几个论坛,甚至一两个stackoverflow问题都说在使用Delegate.BeginInvoke时Delegate.EndInvoke是必要的。我读过的许多谈论使用 BeginInvoke
所以 C#/.NET 问题。在使用 .BeginInvoke 异步调用某些方法时,是否总是需要调用 .EndInvoke?我在某处读到它是强制性的,但问题是 .EndInvoke 会阻止执行吗?有某种
我有一个显示实时值的客户端应用程序。这些值通过 DDE-Advise 提供。这些实时值是数控机床的移动轴。因此,通过此 DdeClientAdvise-Method,每分钟大约有 100 个建议。 当
在 BeginInvoke 之后的回调中,AsyncResult.AsyncDelegate 需要转换为正确的类型,然后才能访问 EndInvoke。 但是我正在使用泛型,那么我是否需要为 N 个泛化
以这种方式为 MainForm 线程调用委托(delegate)是一种好习惯吗?: Txt.MainForm.EndInvoke( Txt.MainForm.BeginInvoke( new
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicates: Must every BeginInvoke be followed by an EndInvoke? I
关于是否每个 BeginInvoke() 都必须与 EndInvoke() 匹配,我读过相互矛盾的意见。是否存在与不调用 EndInvoke() 相关的任何泄漏或其他问题? 最佳答案 Delegate
我有以下测试 [Test] public void aaa() { CallContext.LogicalSetData("aa", "1"); Action parallelMeth
我正在通过 ASP.net 自下而上地工作,并且我正在设置一个老式的委托(delegate)模式: public delegate void ProcessRequestDelegate(Ht
我正在通过 ASP.net 自下而上地工作,并且我正在设置一个老式的委托(delegate)模式: public delegate void ProcessRequestDelegate(Ht
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why does asynchronous delegate method require calling
试图围绕 Tasks 类,更具体地说,Task.Factory.FromAsync 方法。 目前在我的代码中我正在做这样的事情: var handler = MyEvent; if (handler
我的 .aspx 文件中的这个方法... private static string GetPageAsString(string address) {
以下类为例。 public class A { // ... void Foo(S myStruct){...} } public class B { public A test;
为什么委托(delegate)需要在方法触发之前调用 EndInvoke?如果我需要调用 EndInvoke(它会阻塞线程)那么它不是真正的异步调用吗? 这是我要运行的代码。 class Progra
我想知道 BeginInvoke/EndInvoke 方法是如何在委托(delegate)上实现的。我知道它们是由编译器自动生成的,有点特殊,所以反汇编程序无法处理它们。但最终是代码被执行了,对吧?出
我是一名优秀的程序员,十分优秀!