1
2
线程() is always a problem . 你知道COM服务器的情况吗?它是在进程内、进程外还是远程运行?如果COM服务器有问题,而您实际上需要终止它,请考虑将调用包装在一个可以安全终止的牺牲过程(或者至少是一个单独的AppDomain)中(也许您还可以进行一些欺骗并终止有问题的COM应用程序)。如果可以帮助的话,不要在自己的进程中中止线程。 |
2
1
是的,大问题:在很多情况下都不起作用。如果在调用abort()时COM线程正忙于本机代码,则不会发生任何事情,它只是设置了一个标志,因此当线程返回托管代码时,它将弹出threadabortexception。没有一种100%可靠的方法可以中止对非托管代码的调用。您可以尝试终止底层的OS线程,但是clr不会对此做出很好的响应,您可能会破坏进程的稳定性。 |
3
1
我必须补充一下其他评论者已经提到的等待
是错误的,因为它让你的CPU愚蠢地花费它的柱面。 最好使用System.Threading.EventWaitHandle:
如果您的主线程上没有任何操作,则只能启动一个线程并使用comcallssuccessful.waitone(timeout),如果在超时之前设置了event(),则返回true。 无论如何,您最好有一个明确的方法来取消服务上的操作(例如,COM对象方法) |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |