第三方dll筹集活动

时间:2010-11-04 15:00:24

标签: c#

我使用第三方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

由于

1 个答案:

答案 0 :(得分:1)

如果它是第三方DLL,则无法确定它们是如何实现的。当您在调试模式中单步执行时,是否在调用getData()侦听器之前通过了对onReturn()的调用?如果是这样,它可能在内部使用线程(或至少是异步侦听器),并且调用多个getData()太靠近可能会导致它踩到挂起的响应。

我能想到尝试解决这个问题的唯一方法就是自己使用多线程,例如:使用Mutex,在getData()调用之后等待,并在onReturn()事件中释放。这样,您一次只能有一个未完成的请求,这似乎是适合您的条件。

编辑:你有没有和第三方供应商谈过这件事?我猜他们的支持不是最好的,如果你先想到我们,但它可能值得一试。

编辑第二个:当你说它从服务器获取数据时,这是否意味着它通过网络发出请求?如果这些请求没有加密,也许您可​​以对协议进行反向工程并为自己创建一个新的API,而不是依赖于经过验证的有缺陷的黑盒子。