我想知道如何完成此操作。我有一个COM对象,其操作有时需要很长时间,另外我注意到,如果出现错误,它有20分钟的超时时间。这是客户端程序等待这么长时间无法接受的。通过超时调用COM Interop
因此,我在考虑在另一个线程上调用COM操作,并且在某个超时之后才杀死线程。
我有COM帮手通过反射,这是同步做invokation:
ComInvoke.Get<bool>(dcomSrv, "Launched");
这得到了布尔属性从COM实例
,我想换这个使用任务:
var task = Task.Factory.StartNew<bool>(() =>
{
return ComInvoke.Get<bool>(dcomSrv, "Launched");
});
if (task.Wait(5000) == false)
{
task.Dispose();
throw new Exception("Task timeout");
}
问题是,在任务中没有循环,我可以使用取消令牌。
您认为这是一个很好的解决方案还是您有更好的?
谢谢!
它是一个进程内COM对象还是一个远程DCOM对象(名称“dcomSrv”是一个令人不安的线索)? – 2011-03-16 10:26:53
这是一个DCOM对象(类型的代理),可以在本地执行或在远程机器上执行 – Robert 2011-03-16 10:31:55