public static TResult InvokeSub <TResult>(this Document doc, Func <SubTransaction, TResult> func)
        {
            using (var tr = new SubTransaction(doc))
            {
                tr.Start();

                var result = func(tr);

                var status = tr.GetStatus();
                switch (status)
                {
                case TransactionStatus.Started:
                    tr.Commit();
                    return(result);

                case TransactionStatus.Committed:
                case TransactionStatus.RolledBack:
                    return(result);

                case TransactionStatus.Error:
                    tr.RollBack();
                    return(result);

                default:
                    return(result);
                }
            }
        }
        public static void InvokeSub(this Document doc, Action <SubTransaction> action)
        {
            using (var tr = new SubTransaction(doc))
            {
                tr.Start();

                action(tr);

                var status = tr.GetStatus();
                switch (status)
                {
                case TransactionStatus.Started:
                    tr.Commit();
                    return;

                case TransactionStatus.Committed:
                case TransactionStatus.RolledBack:
                    break;

                case TransactionStatus.Error:
                    tr.RollBack();
                    return;

                default:
                    return;
                }
            }
        }
Example #3
0
 public TransactionStatus GetStatus()
 {
     if (transaction is object)
     {
         return(transaction.GetStatus());
     }
     if (subTransaction is object)
     {
         return(subTransaction.GetStatus());
     }
     return(TransactionStatus.Uninitialized);
 }
        public static void SuntranInvoke(this Document doc, Action <SubTransaction> action)
        {
            using (SubTransaction subTransaction = new SubTransaction(doc))
            {
                subTransaction.Start();
                action(subTransaction);
                bool flag = subTransaction.GetStatus() == (TransactionStatus)1;

                if (flag)
                {
                    subTransaction.Commit();
                }
            }
        }