我想知道如何完成此操作。我有一個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