我正在寫一個應用程序修改其他應用程序的數量和使用CoreAudioApi
DLL這樣做。以下代碼塊在主線程中完美工作,但在單獨的線程中調用時,將引發InvalidCastException
。如果這只是兩個線程嘗試訪問相同資源的問題,我會投入互斥鎖,但似乎並非如此。任何想法可能是什麼問題?我很難成爲一名新的C#程序員。我在其中提到只有主線程才能訪問COM對象(如CoreAudioApi)的其他問題時,我需要向主線程發送某種消息。如果這是正確的,那麼做到這一點的最好方法是什麼?CoreAudioApi與線程 - InvalidCastException的
異常(if語句出現在第一Math.abs):
Unable to cast COM object of type 'System.__ComObject' to interface type 'CoreAudioApi.Interfaces.IMMDevice'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{D666063F-1587-4E43-81F1-B948E807363F}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
代碼:
muteSoundMutex.WaitOne();
AudioSessionControl sASC = sInfo.getSAudioSession();
if (Math.Abs(sASC.SimpleAudioVolume.MasterVolume -
(0.05f/defaultDevice.AudioEndpointVolume.MasterVolumeLevelScalar)) < 0.0001
&& savedVol > 0)
{
... // other code here. all mutexes are released correctly.
是的,只有在主線程中使用'IMMDevice'固定的問題;謝謝。我最終使用了一個'AutoResetEvent'來確定何時我的衍生線程完成其執行,以便我可以獲取必要的返回值並處理主線程中的所有內容。 – Ben