我正在處理與非託管MTA COM對象相關的錯誤。該對象具有鎖定和解鎖方法,並使用一個互斥鎖,該互斥鎖需要調用鎖來調用解鎖的相同線程。是否可以指定使用RPC回調線程?
問題是,當從受管STA線程(使用COM互操作)調用鎖定和解鎖時,調用進入RPC回調線程的COM對象,但使用的回調線程並不總是相同的兩個電話。當它不相同時,解鎖調用失敗,因爲它無法解鎖互斥鎖。
換句話說:
管理STA線程1 - > RPC回調(螺紋11) - >鎖定
管理STA線程1 - > RPC回調(螺紋12) - >解鎖 - >錯誤
我正在嘗試在對修復做出任何決定之前評估所有可能的解決方案。因此,我試圖找出:
1)有沒有辦法阻止首先使用RPC回調線程?在我的測試中,如果我從非託管STA線程調用對象,調用似乎進入調用線程本身。來自.NET的調用需要使用RPC回調線程時有什麼不同?有沒有辦法阻止RPC回調被使用? (除了使用MTA調用線程)
2)如果沒有,是否有辦法強制從同一個託管STA線程使用一致的RPC回調線程?
「在我的測試中,如果我從非託管STA線程調用對象,調用似乎進入調用線程本身。」只有當您在沒有正確編組的公寓之間傳遞原始接口指針時,纔會出現這種情況,這違反了COM線程規則。 –