C# 如何为动态加载的方法设置超时

C# 如何为动态加载的方法设置超时,c#,dll,C#,Dll,描述:我正在使用Type.InvokeMember从动态加载的库中调用方法。有时,此方法挂起并且不释放其资源。此外,该方法不将超时作为参数 如何设置此方法的超时,停止该方法在后台运行,然后继续下一步 任何帮助都将不胜感激 您可以在需要时生成新的和它,也可以在需要时创建新的和它 使用AppDomain提供了更多的隔离。支持@lightbricko,因为他的方法将为您提供所需的中止功能 就超时而言,提供一个包装类来监控时间并在单独的线程上调用解决方案可能更容易 您的问题没有提到是否存在返回值或同步

描述:我正在使用Type.InvokeMember从动态加载的库中调用方法。有时,此方法挂起并且不释放其资源。此外,该方法不将超时作为参数

如何设置此方法的超时,停止该方法在后台运行,然后继续下一步


任何帮助都将不胜感激

您可以在需要时生成新的和它,也可以在需要时创建新的和它


使用AppDomain提供了更多的隔离。

支持@lightbricko,因为他的方法将为您提供所需的中止功能

就超时而言,提供一个包装类来监控时间并在单独的线程上调用解决方案可能更容易


您的问题没有提到是否存在返回值或同步性要求。我将根据需求提供一个复杂度不断提高的解决方案。如果您需要我充实更复杂的解决方案,请回复此帖子


不在我的IDE中,所以我在记事本中快速创建了它。这有点脏,但应该给你一个骨架来工作

您可以传入调用该方法所需的参数。有关奖励积分,请查看行动和职能代表!:)

如果您需要它对调用方显示同步(即,调用方需要等待完成),请告诉我,我将更新代码。 这个想法是让调用者等待一个锁互斥锁。 该锁将首先由TimedRemoteInvocation类获取,并在操作完成时释放。再次我可以提供更多的信息,如果你需要它

TimedRemoteInvocation caller = TimedRemoteInvocation.Invoke(...)
lock(caller.sharedLock) {}
最后一个变体期望调用的方法产生一个结果。 这很容易捕获,但将该值返回给调用方需要

  • 调用方处理声明结果的事件

  • 如果需要同步性,结果可以存储在TimedRemoteInvocation类的属性中(同样需要使用互斥锁)

    TimedRemoteInvocation调用者=TimedRemoteInvocation.Invoke(…)
    res=caller.Result//Result属性将抓取/等待互斥锁并停止调用者


  • 这里有很多东西需要解包,我知道我在掩饰,所以如果您需要我添加任何内容,请告诉我。

    我已经尝试过使用线程并在给定的时间间隔后中止它。然而,经过大量的调试,它仍然无法工作。我将尝试使用AppDomain并返回给您很好的答案!我将在以后实现它。然而,我做了更多的工作,并使用线程实现了一个解决方案。非常感谢。
    TimedRemoteInvocation caller = TimedRemoteInvocation.Invoke(...)
    lock(caller.sharedLock) {}