MVH/NAudio-2.2.1/NAudio.Wasapi/CoreAudioApi/ActivateAudioInterfaceCompletionHandler.cs

55 lines
1.6 KiB
C#
Raw Normal View History

2024-06-07 00:47:07 +02:00
using NAudio.CoreAudioApi.Interfaces;
using NAudio.Wasapi.CoreAudioApi.Interfaces;
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace NAudio.Wasapi.CoreAudioApi
{
internal class ActivateAudioInterfaceCompletionHandler :
IActivateAudioInterfaceCompletionHandler, IAgileObject
{
private Action<IAudioClient2> initializeAction;
private TaskCompletionSource<IAudioClient2> tcs = new TaskCompletionSource<IAudioClient2>();
public ActivateAudioInterfaceCompletionHandler(
Action<IAudioClient2> initializeAction)
{
this.initializeAction = initializeAction;
}
public void ActivateCompleted(IActivateAudioInterfaceAsyncOperation activateOperation)
{
// First get the activation results, and see if anything bad happened then
activateOperation.GetActivateResult(out int hr, out object unk);
if (hr != 0)
{
tcs.TrySetException(Marshal.GetExceptionForHR(hr, new IntPtr(-1)));
return;
}
var pAudioClient = (IAudioClient2)unk;
// Next try to call the client's (synchronous, blocking) initialization method.
try
{
initializeAction(pAudioClient);
tcs.SetResult(pAudioClient);
}
catch (Exception ex)
{
tcs.TrySetException(ex);
}
}
public TaskAwaiter<IAudioClient2> GetAwaiter()
{
return tcs.Task.GetAwaiter();
}
}
}