我使用第三方dll从他们的服务器获取一些数据。我调用了一个void方法,然后我订阅了通过调用此方法引发的事件。引发的事件通过其参数返回数据。
所以, 致电:void getdata(id) 引发:void onReturn(object) - >它返回一个包含数据的对象。
每次只有一次getdata(id)调用
时,这个工作问题是当我循环遍历id列表,并且在该循环内部调用该列表的getdata(id)时,相应的事件未正确引发。 比如10个ID的列表,有10个getdata(id)调用,但只有少数onReturns被调用。
返回的对象也返回传递给getdata(id)的id,这样我就可以匹配我发送的数据和我收到的数据。
有没有办法确保所有事件都被收听?因此,如果我通过getdata(id)发送10个ID,我想确保处理10个onReturns。
我正在使用c#,。net 4.0
由于
答案 0 :(得分:1)
如果它是第三方DLL,则无法确定它们是如何实现的。当您在调试模式中单步执行时,是否在调用getData()
侦听器之前通过了对onReturn()
的调用?如果是这样,它可能在内部使用线程(或至少是异步侦听器),并且调用多个getData()
太靠近可能会导致它踩到挂起的响应。
我能想到尝试解决这个问题的唯一方法就是自己使用多线程,例如:使用Mutex,在getData()
调用之后等待,并在onReturn()
事件中释放。这样,您一次只能有一个未完成的请求,这似乎是适合您的条件。
编辑:你有没有和第三方供应商谈过这件事?我猜他们的支持不是最好的,如果你先想到我们,但它可能值得一试。
编辑第二个:当你说它从服务器获取数据时,这是否意味着它通过网络发出请求?如果这些请求没有加密,也许您可以对协议进行反向工程并为自己创建一个新的API,而不是依赖于经过验证的有缺陷的黑盒子。