public void Wait(WaitHandle[] waitHandles) { if (waitHandles == null) throw new ArgumentNullException("waitHandles"); if (waitHandles.Length == 0 || waitHandles.Any(p => p == null)) throw new ArgumentException("Wait handles cannot be of zero length and cannot contain null entries"); var waitHandlePointers = waitHandles.Select(p => p.SafeWaitHandle.DangerousGetHandle()).ToArray(); if (_waitDialog == null) { var factory = (INiWaitDialogFactory)_serviceProvider.GetService(typeof(INiWaitDialogFactory)); ErrorUtil.ThrowOnFailure(factory.CreateInstance(out _waitDialog)); } ErrorUtil.ThrowOnFailure(_waitDialog.ShowWaitDialog( Caption, Message, ProgressText, StatusBarText, ShowDelay, CanCancel, ShowRealProgress, Progress, waitHandlePointers )); ErrorUtil.ThrowOnFailure(_waitDialog.HasCanceled(out _hasCancelled)); }