Esempio n. 1
0
        private bool TryUntilSuccess(Action action)
        {
            const int tryCount = 100;
            var       success  = false;

            var currentTry = 0;

            while (!success)
            {
                try
                {
                    action();
                    success = true;
                }

                catch (System.Runtime.InteropServices.COMException e)
                {
                    currentTry++;
                    _dialogsHelper.ChangeProgressText($"Формирование файла (попытка № {currentTry})...");

                    if (currentTry == tryCount)
                    {
                        return(false);
                    }
                    if ((e.ErrorCode & 0xFFFF) == 0xC472)
                    {
                        // Excel is busy
                        Thread.Sleep(500);
                        success = false;
                    }
                    else
                    {
                        Thread.Sleep(100);
                        success = false;
                    }
                }
            }
            return(true);
        }